java.io.IOException:bt socket不在listen状态[Android Marshmallow]

时间:2016-02-15 11:09:53

标签: java android android-6.0-marshmallow google-glass android-bluetooth

我正在尝试在nexus 5(Android 6+)和Google Glass之间建立连接。 要连接的客户端代码:

try {
    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(
                BluetoothParametersHolder.uuids[0]);
} catch (Exception e) {
    e.printStackTrace();
}

//In a thread
bluetoothSocket.connect();

服务器端代码:

 mmServerSocket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(
                BluetoothParametersHolder.NAME, BluetoothParametersHolder.uuids[0]);

//In a thread
socket = mmServerSocket.accept();

使用https://github.com/vicmns/BluetoothGlass作为参考。 我面临的问题是,在accept()返回后,连接会立即与以下错误断开连接:

  

02-15 16:20:42.769 2163-2414 /? E / bt_btif_sock_rfcomm:   find_rfc_slot_by_id无法找到RFCOMM插槽ID:51       02-15 16:20:43.761 8345-8361 /? W / System.err:java.io.IOException:bt socket未处于侦听状态       02-15 16:20:43.762 8345-8361 /? W / System.err:在android.bluetooth.BluetoothSocket.accept(BluetoothSocket.java:453)       02-15 16:20:43.763 8345-8361 /? W / System.err:在android.bluetooth.BluetoothServerSocket.accept(BluetoothServerSocket.java:158)       02-15 16:20:43.763 8345-8361 /? W / System.err:在android.bluetooth.BluetoothServerSocket.accept(BluetoothServerSocket.java:144)       02-15 16:20:43.763 8345-8361 /? W / System.err:at knowles.com.serverapp.handlers.BluetoothConnectionHandler.doInBackground(BluetoothConnectionHandler.java:41)       02-15 16:20:43.763 8345-8361 /? W / System.err:at knowles.com.serverapp.handlers.BluetoothConnectionHandler.doInBackground(BluetoothConnectionHandler.java:16)       02-15 16:20:43.763 8345-8361 /? W / System.err:在android.os.AsyncTask $ 2.call(AsyncTask.java:295)       02-15 16:20:43.764 8345-8361 /? W / System.err:at java.util.concurrent.FutureTask.run(FutureTask.java:237)       02-15 16:20:43.764 8345-8361 /? W / System.err:在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234)       02-15 16:20:43.764 8345-8361 /? W / System.err:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)       02-15 16:20:43.764 8345-8361 /? W / System.err:at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588)       02-15 16:20:43.782 8345-8361 /? W / System.err:在java.lang.Thread.run(Thread.java:818)

我是蓝牙和玻璃的新手。任何帮助都非常感谢。没有得到现有帖子的帮助。 我在这里尝试的就是发送一个“你好”的#39;从客户端(Glass)到服务器(Mobile)的消息。

1 个答案:

答案 0 :(得分:0)

在框架代码中,我们可以找到以下内容:

if (mSocketState != SocketState.LISTENING)
    throw new IOException("bt socket is not in listen state");

很明显,如果套接字不在状态accept()中,则方法LISTENING会引发异常。

在大多数情况下,如果BluetoothServerSocket的实例已经已关闭,则会发生这种情况。尝试接受连接之前,请确保BluetoothServerSocket没有关闭。