現在、Bluetooth Low Energy を使用するアプリケーションを開発しています (Nexus 4 でテスト中)。Android 4.3 で公式の BLE API を使い始めた後、デバイスを初めて接続した後、そのデバイスまたは他のデバイスに再び正常に接続/通信できることはめったにないことに気付きました。
こちらのガイドに従って、問題なくデバイスに接続し、サービスと特性をスキャンし、通知の読み取り/書き込み/受信を行うことができます。ただし、切断して再接続した後、サービス/特性をスキャンできないか、読み取り/書き込みを完了できないことがよくあります。ログに、これが起こっている理由を示すものは何も見つかりません。
これが発生したら、アプリケーションをアンインストールし、Bluetooth を無効にし、電話機を再起動してから、再び動作を開始する必要があります。
デバイスが切断されるたびに、必ず BluetoothGatt オブジェクトで close() を呼び出して null に設定します。洞察はありますか?
編集:
ログ ダンプ: これらのログについては、電話をルート化し、/etc/bluetooth/bt_stack.conf 内の関連項目のトレース レベルを上げました。
接続成功- 電話を再起動してアプリをインストールした後の最初の試行。接続、すべてのサービス/特性の検出、および読み取り/書き込みができます。
失敗した試行 1 - これは、上記の成功した接続から切断した後の次の試行です。特性を発見できたようですが、最初の読み取りで null 値が返され、その後すぐに切断されました。
試行の失敗 2 - サービス/特性を発見することさえできない例。
編集 2:
接続しようとしているデバイスは、TI の CC2541 チップに基づいています。私はTI SensorTag (これも CC2541 ベース) を入手して遊んでみましたが、昨日 TIが SensorTag 用のAndroid アプリをリリースしたことを発見しました。ただし、このアプリにも同じ問題があります。他の 2 台の Nexus 4 でこれをテストしたところ、同じ結果が得られました。SensorTag への接続は 1 回目または 2 回目は成功しましたが、(ログによると) その後サービスを検出できず、あらゆる種類のクラッシュが発生しました。この特定のチップの問題なのだろうか?