1

質問のタイトルの続きとして、ペアリングされたデバイスからBluetoothDeviceデバイスを選択し、次のようにして BluetoothSocket を取得します。

bSocket = device.createInsecureRfcommSocketToServiceRecord(myUUID);
bSocket.connect();

私の質問は次のとおりです。ペアリング時に UUID を介した通信用のチャネルがチャネル 2 として記録されたが、接続時に他のデバイスがそのリスナーをチャネル 3 に切り替え、チャネル 3 でサービスをアドバタイズしているとします。同じ myUUID です。

connectを実行すると、チャネル 2 に接続しようとしますか (キャッシュ内、他の質問を参照してください)、それとも (.connect コマンド) 新しい SDP を実行して現在のチャネル、つまり 3 を取得し、接続を試みますか?チャネル 3 (および myUUID)。

connectコマンドでどのチャネルが試行されたかを確認することはできますか。

ありがとう。

4

1 に答える 1

1

Android には、Bluetooth 用の非表示の (隠されている) 機能がいくつかあります。それは IBluetooth と呼ばれます。 ここでは、その使用方法について説明します。

実行したら、getRemoteServiceChannel関数とonRfcommChannelFoundコールバックを試してください。正しいチャンネルが取得され、UUID に対して見つかったチャンネルがそれぞれ表示されます。

通常、あなたのエラーでは、最初の接続でチャネル 2 を取得し、その後何も取得しないことが期待されます。これは、Android が怠惰で、別の SDP ブラウズを行わなかったことを意味します。

それらを正しく接続するにはどうすればよいですか?運が良ければ、チャンネル 2 に接続した後、これらの隠し関数を呼び出すと、SDP データベースが更新されるのではないでしょうか?! 別の方法は、それらをアンボンドし、プログラムで再ボンドすることです-それにより、別のSDPブラウズが行われると思われます...

役に立つ場合は投票することを忘れないでください

于 2012-11-05T12:50:02.490 に答える