2016-03-03 7 views
7

Wir stehen vor einem Problem beim Lesen von Eigenschaften von Remote-BLE-Gerät. Dieses Problem tritt in Android OS 5.0 und höher auf.Lesen von mehr als 20 Byte von Remote-BLE-Gerät in Lolipop fehlgeschlagen

Punkte sind unten Ausgabe zu generieren:

  1. ein Peripheriegerät mit einem Service und einer Kurzbezeichnung.
  2. Eigenschaften werden nur Leseberechtigung haben. Setzen Sie nun den Wert dieses Merkmals mit mehr als 20 Zeichen, d. H. 20 Bytes.
  3. Lassen Sie nun Peripheriegeräte mit einem Dienst und einem Merkmal senden.
  4. Starten Sie jetzt eine BLE Scanner-App vom Markt und stellen Sie eine Verbindung mit diesem Peripheriegerät her.
  5. Sobald die Verbindung mit dem Peripheriegerät erfolgreich hergestellt wurde, versuchen Sie, die Merkmale zu lesen.
  6. In diesem Fall zeigt es keine Daten und beim Debuggen der App zeigt es, dass es Null Daten zurückgibt.
  7. Der oben genannte Fall funktioniert nicht in Android OS 5.0 und höher.
  8. Gleicher Fall, der in Android 4.4 arbeitet.

So gibt es etwas Veränderung in Android OS 5.0 und höher, die intern disable readblob() Anforderung, die Daten mit mehr als 20 Zeichen lesen kann.

Wir suchen Hilfe, um dieses Problem zu lösen.

+0

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

Antwort

0

Dies kann einfach erreicht werden, indem Sie Ihre Daten in 20-Byte-Pakete aufteilen und eine kurze Verzögerung implementieren (d. H. Mit sleep()) zwischen dem Senden jedes Pakets.

Sie können BluetoothGatt.requestMtu() verwenden. Siehe die 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. 

Wenn Sie mehr 20 Bytes senden möchten, sollten Sie Array byte [] umfassen, wie viele Paket Sie definieren. ist ein Beispiel Android: Sending data >20 bytes by BLE

Auch gibt es ein weiteres Beispiel How to send more than 20 bytes data over ble in android?

Verwandte Themen