禁用蓝牙时,BluetoothServerSocket.accept()永远不会返回

时间:2013-06-16 13:31:13

标签: android bluetooth

我正在使用BluetoothServerSocket.accept()接受传入的蓝牙连接。众所周知,BluetoothServerSocket.accept()阻塞直到传入连接或直到错误(抛出IOException)。一切正常,但以下情况除外:在调用BluetoothServerSocket.accept()后禁用蓝牙时,不会发生异常。结果,线程被永久阻塞,直到调用close()。 这对我来说毫无意义,因为蓝牙适配器在关闭时无法接受连接。

使用BluetoothSocket.accept(int timeout)有一种丑陋的方法可以解决这个问题,并且还可以监听BluetoothAdapter.ACTION_STATE_CHANGED事件,并在接受线程关闭时调用close()。但对于这么简单的事件来说,这听起来太过苛刻了。

禁用蓝牙适配器后,是否有更简洁的方式从BluetoothServerSocket.accept()返回?

0 个答案:

没有答案