BLEのAndroidアプリを作成中、時々、BluetoothGattクラスのwriteCharacteristic()メソッドがfalseでリターンする事象が発生しました。複数扱っているBLE機器の中で、特定の機器だけ? 機器側の不具合でしょうか?
何がおこっているかBLEアナライザを使えばよいのですが、安いものだとみれません。海外のサイトを見ても情報がなく、BluetoothGattのステータスは、BluetoothGattCallback時でないとわからない。こういう場合は、少しwaitをおくか、retryしてみるに限ります。しかし解消せず。
そこでたまたま気づいたのですが、BluetoothGattServiceのインスタンスの取得から、retryすると解消しました。
当事象が発生する機器は、機器メーカのカスタムコマンドでアクセスする方式で、機器から測定値を一回受信するのに、最低4回writeCharacteristic()のcallが必要でした。他のメーカさんは大体一回で、二回要するのはペアリング時のみでした。このあたりの仕様とAndroid側の相性があるのかもしれません。