1

我有一个奇怪的问题,我似乎无法弄清楚发生了什么。我使用蓝牙聊天示例作为基础,并且在大多数情况下一切正常,但是,当尝试将连接从一个 UUID 切换到另一个(两个不同的应用程序)时。硬件关闭连接并打开一个具有不同 UUID 的新连接。

问题是我的蓝牙套接字在应用程序端没有关闭。我在日志中看到这些消息:

11-20 15:00:44.287: I/BTL_IFC(13313): btl_ifc_ctrl_rx: [BTL_IFC CTRL] recv BTLIF_BTS_RFC_DISC_IND (BTS) 11 pbytes (hdl 47)
11-20 15:00:44.287: I/BLZ20_WRAPPER(13313): btlif_ctrl_callback: btlif_ctrl_callback : msg id BTLIF_BTS_RFC_DISC_IND
11-20 15:00:44.287: I/BLZ20_WRAPPER(13313): btlif_process_disc_ind: disconnect ind status 19, rc chan 8
11-20 15:00:44.287: D/BLZ20_WRAPPER(13313): btlif_signal_event:  fd (-1:51), bta 5, rc 8, wflags 0x0, cflags 0x6, port 9053
11-20 15:00:44.287: D/BLZ20_WRAPPER(13313): btlif_signal_event: ### event BTLIF_BTS_RFC_DISC_IND not matched ###
11-20 15:00:44.287: I/BTL_IFC(13313): send_ctrl_msg: [BTL_IFC CTRL] send BTLIF_BTS_RFC_DISC_IND_ACK (BTS) 9 pbytes (hdl 47)

所以我知道它被断开了,但是我的套接字仍然打开。我会假设当我尝试这样做时,它会给我一个 I/O 异常,但事实并非如此。

mmInStream.available()

它只是返回 0 并继续运行。我还监视了 BluetoothSocket.java 类中的 mClosed 标志,在这种情况下它永远不会设置为 true。

我注册了正常的断开连接意图,我错过了一个吗?

    IntentFilter stateChangeFilter = new IntentFilter("android.bluetooth.adapter.action.STATE_CHANGED");
    IntentFilter disconnectFilter1 = new IntentFilter("android.bluetooth.device.action.ACL_DISCONNECTED");
    IntentFilter disconnectFilter2 = new IntentFilter("android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED");

    registerReceiver(mListenForDisconnect,stateChangeFilter );
    registerReceiver(mListenForDisconnect,disconnectFilter1 );
    registerReceiver(mListenForDisconnect,disconnectFilter2 ); 
4

0 回答 0