2016-03-03 4 views
7

Siamo di fronte a un problema durante la lettura delle caratteristiche dal dispositivo BLE remoto.Lettura di più di 20 byte dal dispositivo BLE remoto non riuscita in Lolipop

Questo problema si verifica in Android OS 5.0 e versioni successive.

punti sono al di sotto di generare problema:

  1. Fai un dispositivo periferico con un servizio e uno caratteristiche.
  2. Le caratteristiche avranno solo permesso di lettura. Ora imposta il valore di queste caratteristiche con più di 20 caratteri, cioè 20 byte.
  3. Ora il dispositivo periferico trasmette se stesso con un servizio e una caratteristica.
  4. Ora lanciare qualsiasi applicazione per scanner BLE dal mercato e connettersi con questa periferica.
  5. Una volta collegato correttamente al dispositivo periferico, provare a leggere le caratteristiche.
  6. In questo caso non mostrerà alcun dato e durante il debug dell'app mostra che restituisce dati nulli.
  7. Lo stesso caso sopra non funziona su Android OS 5.0 e versioni successive.
  8. Lo stesso caso funziona in Android 4.4.

Quindi c'è qualcosa di cambiamento nel sistema operativo Android 5.0 e superiori che internamente disabilitare readblob() richiesta in grado di leggere i dati con più di 20 caratteri.

Stiamo cercando aiuto per risolvere questo problema.

+0

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

risposta

0

Questo può essere semplicemente ottenuto dividendo i dati in pacchetti da 20 byte e implementando un breve ritardo (cioè utilizzando sleep()) tra l'invio di ciascun pacchetto.

È possibile utilizzare BluetoothGatt.requestMtu(). Vedere la 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. 

Se si desidera inviare più di 20 byte, è necessario definire array di byte [] includono il numero di pacchetti che si desidera. C'è un esempio Android: Sending data >20 bytes by BLE

Inoltre v'è un altro esempio How to send more than 20 bytes data over ble in android?