2016-03-03 8 views
7

Mamy do czynienia z jednym problemem podczas odczytu charakterystyki z odległego urządzenia BLE.Czytanie Ponad 20 bajtów z zdalnego urządzenia BLE nie powiodło się w Lolipop

Ten problem występuje w lokalizacji Android OS 5.0 i nowszych.

Punkty są poniżej, aby wygenerować problem:

  1. Dodać jedno urządzenie peryferyjne z jednej usługi i jednego cechach.
  2. Parametry będą miały tylko uprawnienie do odczytu. Teraz ustaw wartość tej charakterystyki na więcej niż 20 znaków, czyli 20 bajtów.
  3. Teraz niech urządzenie peryferyjne nadaje się z jedną usługą i jedną charakterystyką.
  4. Teraz uruchom dowolną aplikację skanującą BLE z rynku i połącz się z tym urządzeniem peryferyjnym.
  5. Po pomyślnym połączeniu z urządzeniem peryferyjnym po prostu spróbuj odczytać charakterystyki.
  6. W tym przypadku nie wyświetla żadnych danych, a podczas debugowania aplikacji pokazuje, że zwraca puste dane.
  7. Powyższy przypadek nie działa w systemie Android OS 5.0 i nowszych wersjach.
  8. Ta sama sprawa w Androidzie 4.4.

Więc jest coś zmienić w Android OS 5.0 i powyżej tego wewnętrznie wyłączyć readblob() wniosku, że może odczytać dane o więcej niż 20 znaków.

Poszukujemy pomocy w rozwiązaniu tego problemu.

+0

http://stackoverflow.com/questions/24135682/android-sending-data-20-bytes-by-ble – pRaNaY

Odpowiedz

0

Można to w prosty sposób osiągnąć, dzieląc dane na 20 bajtowych pakietów i realizując krótkie opóźnienie (tj. Za pomocą trybu uśpienia()) między wysyłaniem każdego pakietu.

Można użyć BluetoothGatt.requestMtu(). Zobacz Official document of BluetoothGatt.requestMtu

 Request an MTU size used for a given connection. 
     When performing a write request operation (write without response), the data  
sent is truncated to the MTU size. This function may be used to request a larger MTU size to be able to send more data at once. 

A onMtuChanged(BluetoothGatt, int, int) callback will indicate whether this operation was successful. 

Requires BLUETOOTH permission. 

Jeśli chcesz wysłać kolejne 20 bajtów, należy zdefiniować tablicy byte [] obejmują ile pakiet chcesz. Jest przykładem Android: Sending data >20 bytes by BLE

Również nie jest kolejnym przykładem How to send more than 20 bytes data over ble in android?

Powiązane problemy