Android蓝牙套接字连接挂起

时间:2012-03-01 05:10:13

标签: android bluetooth connection rfcomm

我遇到一个问题,当我调用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;
    }

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

接近这个的任何其他建议?

感谢。

1 个答案:

答案 0 :(得分:0)

你为什么要调用Thread.Sleep? BluetoothSocket.connect是一个阻止呼叫。这意味着在connect返回成功连接或抛出异常之前,不会调用Thread.Sleep。

你是在活动中打电话吗?因为这会挂起你的活动。你应该有3个线程来处理蓝牙,接受线程,连接线程和连接线程。就像在这里的BluetoothChat示例中一样:

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