我正在使用BluetoothServerSocket.accept()
接受传入的蓝牙连接。众所周知,BluetoothServerSocket.accept()
阻塞直到传入连接或直到错误(抛出IOException
)。一切正常,但以下情况除外:在调用BluetoothServerSocket.accept()
后禁用蓝牙时,不会发生异常。结果,线程被永久阻塞,直到调用close()
。
这对我来说毫无意义,因为蓝牙适配器在关闭时无法接受连接。
使用BluetoothSocket.accept(int timeout)
有一种丑陋的方法可以解决这个问题,并且还可以监听BluetoothAdapter.ACTION_STATE_CHANGED
事件,并在接受线程关闭时调用close()
。但对于这么简单的事件来说,这听起来太过苛刻了。
禁用蓝牙适配器后,是否有更简洁的方式从BluetoothServerSocket.accept()
返回?