2016-03-03 12 views
7

リモートBLEデバイスから特性を読み取る際に問題が1つあります。読み込みリモートBLEデバイスから20バイト以上がLolipopで失敗しました

この問題は、Android OS 5.0以上で発生します。

ポイントは、問題を生成するには、以下のとおりです。

  1. つのサービスや1つの特性を持つ一つの周辺機器を確認します。
  2. 特性には読み取り権限のみがあります。この特性の値を20文字以上、すなわち20バイト以上に設定します。
  3. 周辺機器を1つのサービスと1つの特性でブロードキャストさせます。
  4. 市販のBLEスキャナアプリを起動し、この周辺機器と接続します。
  5. 周辺デバイスと正常に接続できたら、特性を読み取ろうとしてください。
  6. この場合、データは表示されません。アプリをデバッグすると、nullデータが返されます。
  7. 上記のAndroid OS 5.0以上で動作しないケースは同じです。
  8. 同じケースがアンドロイド4.4で動作しています。

だから、アンドロイドOS 5.0で、よりその20文字のデータを読み取ることができ、内部で無効readblob()要求以上の何かの変化があります。

私たちはこの問題を解決するためにいくつかの助けを求めています。

+0

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

答えて

0

これは、データを20バイトのパケットに分割し、各パケットを送信する間に短い遅延(すなわち、sleep()を使用)を実装することによって簡単に達成できます。

BluetoothGatt.requestMtu()を使用できます。あなたはより多くの20のバイトを送信したい場合は、あなたが望むどのように多くのパケットが含ま[]配列のバイトを定義する必要があります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. 

を参照してください。 例がありAndroid: Sending data >20 bytes by BLE

また別の例があるHow to send more than 20 bytes data over ble in android?

関連する問題