この通常のコードを使用して、Bluetooth ソケットを開いたり接続したりしています。すべてのデバイスで完全に動作しますが、Android 4.2.1 を搭載した最新の Nexus でのみ、この IOException が発生します:「失敗したソケットの読み取りが閉じている可能性があります」。
デバイスの再ペアリングを試み、UUID を確認しましたが、すべて問題ありませんでした。前述のように、まったく同じコードが他のすべてのデバイスで機能します。現時点では、他に見るべきアイデアがありません....
プライベート クラス ConnectBluetoothThread extends Thread { private final BluetoothSocket mmSocket; プライベート最終 BluetoothDevice mmDevice;
public ConnectBluetoothThread(BluetoothDevice device) {
mmDevice = device;
BluetoothSocket tmp = null;
try {
tmp = mmDevice
.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
...other code
}
mmSocket = tmp;
}
public void run() {
mBluetoothAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
mmSocket.connect(); // <=== this is where the IOException is beeing raised!!!!
} catch (IOException e) {
Log.e(this.getClass().getSimpleName(),
" -> FAILED:", e);
connectionFailed(e);
// Close the socket
try {
mmSocket.close();
} catch (IOException e2) {
}
return;
}
// Reset the ConnectThread because we're done
synchronized (InterBT.this) {
mConnectBluetoothThread = null;
}
// Start the connected thread
connected(mmSocket, mmDevice);
}