4

次のコードを使用して、HTC One X から SENA bluetooth ESD110 シリアル モジュールへの安全でない rfcomm 接続を作成しています。

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(addr);
BluetoothSocket socket = null;

try{
socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(SERVICE_UUID));

 mBluetoothAdapter.cancelDiscovery();

socket.connect();
sendMessage(socket,"working!");
socket.close();

ここでのポイントはオートペアリングでモジュールに接続することで、すべて動作していますが、接続が確立されるまでに約 15 秒かかります。

デバッグは次の場所に残ります。

socket.connect();

15秒間、その後のみストリングを接続してモジュールに転送します(これには1秒かかります)。

MAC アドレスに接続する前に電話が他のデータ (サービス検出など) を処理している可能性はありますか? それとも、HTC ハードウェアの問題でしょうか?

4

2 に答える 2

1

EDIT遅いサービス検出が問題である場合は、Reflection を createRfcommSocket メソッドに直接使用して、サービス検出全体をスキップすることで回避できます。BT-SPP 関連のプロジェクトで他の理由でこれを行います。次のようになります。

BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice bd = bta.getRemoteDevice(mac);
Method m = bd.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
bt_connection = (BluetoothSocket) m.invoke(bd, Integer.valueOf(1));

事前コメント: 常にスキャンする必要がありますか? Mac を記憶するオプションがあれば、より高速に接続できます。長い待ち時間は発見に由来します-これが本当に終了した場合にのみ接続できます( mBluetoothAdapter.cancelDiscovery(); の後に直接行われない)-そしてこれには時間がかかる場合があります..

于 2012-06-20T10:59:09.447 に答える
0

2回目は早いですか?最初に電話を見つける (デバイスがターゲット デバイスのタイミングを取得する前) には、しばらく時間がかかります。

ただし、ターゲットを見つけなければならない場合でも、15 秒もかからないはずです。

おそらく、次のバグが発生している可能性があります: http://code.google.com/p/android/issues/detail?id=29039

接続の作成は機能するが、通常よりもはるかに時間がかかる状況が 1 つあります。

于 2012-06-20T14:10:55.177 に答える