禁用/启用蓝牙时,BluetoothServerSocket.accept()会挂起

时间:2012-01-17 04:32:48

标签: android bluetooth

如果用户在我们的应用运行时禁用/启用蓝牙,我们如何恢复?

我们有一个应用程序可以在不进行蓝牙发现的情况下进行蓝牙连接,因为我们已经知道蓝牙MAC地址。服务器端在BluetoothServerSocket上的accept()上循环,客户端使用BluetoothSocket上的connect()。套接字连接通常是短暂的,通常一切正常。

这一切都在一对运行2.3.3的Nexus One手机上运行。其他一些手机 - 例如Sprint HTC Evo也运行2.3.3 - 似乎不支持这种连接方式,即使它是在Android开发人员文档中描述的。没有手机扎根。

当我们的应用程序运行时,如果手机移出蓝牙接近,然后再次彼此靠近,它们暂时无法连接,但随后又开始连接,所有这些都是有意义的。

当我们的应用程序运行时,如果用户进入设置并禁用蓝牙,我们将无法再连接,这是有道理的。但是,当用户再次启用蓝牙时,accept()会永久挂起。无论在禁用蓝牙时accept()是否处于活动状态,都是如此。 (如果BluetoothAdapter.isEnable为false,我们有代码避免调用accept。)

我们尝试通过从另一个线程关闭套接字然后重新建立BluetoothServerSocket套接字来断开accept(),但是当我们调用BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord()时我们得到“无法注册SDP记录”,即使我们有关闭了前一个套接字,文档说密切释放所有资源。最后,我们必须重新启动我们的应用程序以使工作正常。

那么......如果用户在应用程序运行时更改蓝牙功能,应该会发生什么?

我们的应用有什么方法可以恢复并开始接受蓝牙连接吗?

客户端似乎没有任何麻烦地处理中断。

谢谢!

0 个答案:

没有答案
相关问题