安卓蓝牙套接字连接挂起

4

我遇到了一个问题,当我调用sock.connect()时,它会无限期地挂起。没有异常和超时。

try
    {
        Method m = dev.getClass().getMethod("createRfcommSocket", new     Class[] {int.class});          
        sock = (BluetoothSocket) m.invoke(dev, 1); 
        sock.connect();
        Thread.sleep(100);
        in = sock.getInputStream();
        out = sock.getOutputStream();
    }
    catch(ConnectTimeoutException ex)
    {
        return false;
    }
    catch(IOException ex)
    {
        return false;
    }
    catch(Exception ex)
    {
        return false;
    }

原因是另一个应用程序已经在使用蓝牙设备。我试图使我的连接失败,至少抛出异常或其他提示,让我知道该设备已被另一个应用程序使用。

有其他建议可以解决这个问题吗?

谢谢。


你能解决这个问题吗?我也遇到了类似的问题。 - My God
1个回答

0
为什么要调用Thread.Sleep?BluetoothSocket.connect是一个阻塞调用。这意味着,只有在连接成功或抛出异常后,您的Thread.Sleep才会被调用。
您是在activity中调用它吗?因为这会挂起您的activity。您应该有3个线程来处理蓝牙,一个接受线程,一个连接线程和一个已连接线程。就像这里的BluetoothChat示例一样:

http://developer.android.com/resources/samples/BluetoothChat/index.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接