ペアリングされた 2 つのスマートフォン間の Bluetooth 接続を使用して Android アプリに取り組んでいます。Bluetooth ロジックは、有名な BluetoothChat SDK の例に基づいています。サーバー用accept()
のスレッド、クライアント用のスレッド、connect()
およびソケットでの読み取り/書き込み用のスレッドを管理する「サービス」クラスです。
アクティブな接続 (クライアント側またはサーバー側の両方から) を閉じた場合を除いて、すべて正常に動作し、新しい接続を開始しようとすると、次のエラーで失敗します。
java.io.IOException: Service discovery failed
いくつかの調査の後、これは UUID の問題であると考えるようになりました。BTChat の例 ( fa87c0d0-afac-11de-8a39-0800200c9a66
) の UUID を使用していますが、別のランダムな UUID に問題が残っています (それは でした31ef5990-dc20-11e2-a28f-0800200c9a66
)。
関連するクライアント logcat は次のとおりです。(クライアントconnect()
は失敗するものです):
E/BluetoothService.cpp: stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
D/BluetoothService: Cleaning up failed UUID channel lookup: 30:17:C8:A7:C6:C3 fa87c0d0-afac-11de-8a39-0800200c9a66
java.io.IOException: Service discovery failed
cancelDiscovery()
D-Bus エラーはおそらく、Android ドキュメントが before を呼び出すことを提案しているによって引き起こされconnect()
ます。それが本当の問題だと思いますfailed UUID channel lookup
が、これを修正する方法がわかりません。別の (よく知られている?) UUID を使用する必要がありますか?
必要に応じて、コード スニペットを表示できます。しかし、この問題は BluetoothChat と非常に論理的に似ています。