メーカーの異なる携帯電話を2台接続しようとしたところ、接続できませんでした。私は、2つのXperia電話とBluetoothが非常にうまく接続するアプリを開発しました(それらの間のSamsungデバイスと同じです)。しかし、Sony Xperia と Samsung の携帯電話に接続しようとすると、接続しません。
このアプリを作成したとき、BluetoothChatService クラス フォーム Google BluetoothChat Example (バージョン 8) をプロジェクトにコピーしました (このファイルは変更しませんでした) が、上記の問題があります。というわけで、10回目のAPI版Google BluetoothChatサンプルをダウンロードして、初回は接続するが、次回は接続しない。問題は、Sony Xperia電話がSamsung電話からのbluetoohtデバイス情報を記録せず、Samsungがこの情報を記録することです.
01-18 11:29:07.036: D/BluetoothService(1744): B0:EC:71:E3:FB:41 bond state 11 -> 10 (9)
01-18 11:29:07.066: V/BluetoothEventRedirector(18829): Received android.bluetooth.device.action.BOND_STATE_CHANGED
01-18 11:29:07.066: E/CachedBluetoothDeviceManager(18829): Got bonding state changed for B0:EC:71:E3:FB:41, but we have no record of that device.
01-18 11:29:07.066: W/CachedBluetoothDeviceManager(18829): showUnbondMessage: Not displaying any message for reason:9
次のステップは、2 台の電話のペアリングを解除することだったので、それらのstackoverflow の例を試してみると、そのうちの 1 つがこの問題を解決しました。
これで、Sony Xperia U から Samsung Galaxy SII への接続はうまくいきましたが、Samsung SII から Xperia U に接続しようとすると、IOExpection に「接続を拒否します」というメッセージが表示されて接続できません。
これは、Google BluetoothChatService ファイルの例の ConnectThread クラスからのコピーです。
public void run() {
Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType);
setName("ConnectThread" + mSocketType);
// Always cancel discovery because it will slow down a connection
mAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a
// successful connection or an exception
mmSocket.connect();
} catch (IOException e) {
Log.i("INFO", e.getMessage());
// Close the socket
try {
mmSocket.close();
} catch (IOException e2) {
Log.e(TAG, "unable to close() " + mSocketType +
" socket during connection failure", e2);
}
connectionFailed();
return;
}
// Reset the ConnectThread because we're done
synchronized (BluetoothChatService.this) {
mConnectThread = null;
}
// Start the connected thread
connected(mmSocket, mmDevice, mSocketType);
}
更新 1:
私はこの問題について考えていて、BluetoothChatService からのいくつかの行にコメントしました。Samsung と Xperia デバイス間の接続は現在です。接続はできているのですが、例外コードが通り過ぎて接続が終了したので、例外コードをコメントしました。しかし、Xperia と Galaxy Nexus を接続しようとすると、問題が発生します。
ConnectThread クラスの Run メソッドは次のとおりです。
public void run() {
Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType);
setName("ConnectThread" + mSocketType);
// Always cancel discovery because it will slow down a connection
mAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a
// successful connection or an exception
mmSocket.connect();
} catch (IOException e) {
// Close the socket
// try {
// mmSocket.close();
// } catch (IOException e2) {
// Log.e(TAG, "unable to close() " + mSocketType +
// " socket during connection failure", e2);
// }
// connectionFailed();
// return;
}
// Reset the ConnectThread because we're done
synchronized (BluetoothService.this) {
mConnectThread = null;
}
// Start the connected thread
connected(mmSocket, mmDevice, mSocketType);
}