RFCOMM を使用して Bluetooth 経由でデバイスに接続する Android アプリを作成しています。接続を確立するための基礎として BluetoothChat の例を使用すると、ほとんどの場合、すべてが完全に機能します。
ただし、ソケットが既に開いているというメッセージが原因で、再接続できない場合があります。
RFCOMM_CreateConnection - すでに開かれている状態:2、RFC 状態:4、MCB 状態:5
これは、デバイスに接続し、アプリを閉じて (onDestroy() を呼び出し)、再度開いて再度接続しようとすると、上記の結果になる傾向があります。
ConnectThread (ref.BluetoothChat の例) での接続には、このメソッドを使用します。
Method m = device.getClass().getMethod("createRfcommSocket",new Class[] {int.class });
tmp = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
mmSocket = tmp;
この問題を解決する唯一の方法は、Android フォンの Bluetooth をオフ/オンにすることです。
これにより、onDestroy() でソケットが閉じられていないと思われますが、前述の例に示すように、すべてのスレッドを閉じることを呼び出しています。
どんなアイデアでも大歓迎です。