Android BluetoothSocket.用超时结束



我得到了这种罕见的情况,我试图连接一个蓝牙插座到服务器和连接方法只是不会返回。下面是我的代码:

            device = _adapter.getRemoteDevice(_address);
            socket = device.createInsecureRfcommSocketToServiceRecord(_uuid);                           
            _adapter.cancelDiscovery();
            socket.connect();

这是在AsyncTask中运行,任务永远不会完成,因为连接永远被阻塞…这也可以防止重新连接到服务器(我还没有弄清楚是否我不能完全使用BT或只是不能使用相同的目标地址和UUID重新连接)。是否有一种方法来做连接与超时?

解决问题的一种方法是让另一个线程通过调用cancel(true)(这将中断AsyncTask线程)或通过调用Socket上的close()来中断AsyncTask。例如,它可以由主线程完成,通过在socket.connect()之前向其处理程序发布一个延迟的回调,并将在之后直接删除。

那么在你的例子中

post timeout callback to handler, with reference to socket or to this (AsyncTask)
try {
    socket.connect();
} catch (IOException e) { // and/or InterruptedException
    couldn't connect
} finally {
    remove callback (this must be done here as the IO exception might be caused by something other than the timeout callback)
}

相关内容

  • 没有找到相关文章

最新更新