現在、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回目は成功していますが、(ログによると)その後のサービスの検出に失敗し、あらゆる種類のクラッシュを引き起こしています。この特定のチップに問題があるのかと思い始めています。