web-dev-qa-db-ja.com

Android BLE、読み取りおよび書き込み特性

私は現在Android BLEを開発していますが、Android BLEスタックで多くの問題に遭遇しました。

私の開発ツールはSamsung Galaxy Jで、Android 4.3。

BLEから特性を読み取り、特性を書き込む方法を知りたい(受信したデータを確認し、BLEを使用して別のデータを送信するようなものです)

そして、Android BLEコールバックがどのように機能するかを理解するのに深刻な問題があります、私はこれらの5つの機能を理解していません...マニュアルは明確ではありません、誰もが簡単な形で説明できますか?

onCharacteristicWrite
onCharacteristicRead
onCharacteristicChanged
onDescriptorRead
onDescriptorWrite

私の現在の状況は、onCharacteristicChanged()コールバックでデータを読み取ることができた後、受信したデータを検証し、使用してデータを送信しようとしています

characteristics.setValue(data)
gatt.writeCharacteristic(characteristics)

ただし、Android BLEスタックはonCharacteristicsWrite()を呼び出しておらず、実際にはAndroidがハングしているだけです。

私はAndroid BLEについて、グーグルにしようとします、多くの情報はなく、BLEスタックがどれほど不安定であるかについて不平を言うだけです......

27
Tim

Android BLEからの各コールバックには機能があります。

onDescriptorReadおよびonDescriptorWrite

これは、BLEデバイスの構成設定の書き込み/読み取りに使用されます。一部のメーカーは、BLEデバイスに接続する前に、一部のデータをBLEデバイスに送信し、読み取りで確認する必要がある場合があります。

onCharacteristicWrite

これは、通常BLEデバイスのデータモードで、BLEデバイスにデータを送信するために使用されます。このコールバックは、入力時に呼び出されます

gatt.writeCharacteristic(characteristics);

onCharacteristicRead

これは、BLEデバイスからデータを読み取るために使用されます。コールバックは、このコードを記述するときに呼び出されます

gatt.readCharacteristic(characteristics);

onCharacteristicChanged

このコールバックは、writeCharacteristic(characteristics)を使用してデータを送信しようとしており、BLEデバイスが何らかの値で応答するときに呼び出されます。

通常、BLEデバイスにはいくつかの特性があります。単純にするために、いくつかの特性に名前を付けます。

  • [〜#〜] write [〜#〜]-書き込み特性
  • [〜#〜] read [〜#〜]-特性の読み取り

明確にするために、データを送信するときに[〜#〜] write [〜#〜]特性を使用し、次にBLEデバイスが応答するときにAndroid =アプリは[〜#〜] read [〜#〜]を呼び出します

注意すべき非常に重要なポイントは、Android BLEスタックを使用すると、一度に1つの特性のみを記述できます!!

例:書き込み特性を同時に2回呼び出そうとした場合

gatt.writeCharacteristic(characteristics);
gatt.writeCharacteristic(characteristics);

Android BLEスタックは2番目の書き込み特性を発行しません!

48
user2094060