IOT用のアプリを開発しながらBLE周辺機器と通信してみました。BLE Lollipop API を使用します。
各 BluetoothGattService は異なる BluetoothGattCharacteristic を提供でき、それぞれが読み取り、書き込み、または通知される特定の値を表します。
価値はさまざまな形で伝えられます。ただし、特定の Characteristic がどの形式でエンコードされているかを知る方法はありません。
この mKeySize は解決策になると思いましたが、値の出力を決定するために BluetoothGattCharacteristic 内でアクセスしたり使用したりすることはできません。
/**
* Returns the deisred key size.
* @hide
*/
/*package*/ int getKeySize() {
return mKeySize;
}
次の関数を利用して、目的の出力をチェックしました。
String getStringValue (int offset)
getIntValue(int formatType, int offset)
getFloatValue(int formatType, int offset)
しかし、通信データが複雑でない特定の場合にのみ有用でした。
デバイス名-> (getStringValue)
BatteryLevel ->(getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8,0))
それらは簡単な餌でしたが、 Peripheral Preferred Connection Parametersのような特性はどこにも認識されませんでした。
私はすでに静的ハッシュマップを使用して、割り当てられた番号に基づいて仕様名を取得しました。これは、適応されたすべての BLE プロファイルを含めるためにサイズが大きくなるようです。
BluetoothGattCharacteristics 値を適切に取得するためのより良い方法があるかどうか知りたいですか?
また、特性値と特定の場所での特定の値を記述するさまざまな方法がありますが、この不確実性にどのようにアプローチすればよいですか?
この Android アプリケーションBLEScannerをチェックしてください。大部分は読み取りと書き込みを実行できます。