我遇到了一个问题,当我调用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;
}
原因是另一个应用程序已经在使用蓝牙设备。我试图让我的连接失败,至少抛出一个异常或其他东西,让我知道设备已经被另一个应用程序使用。
对此还有其他建议吗?
谢谢。
为什么要调用Thread.Sleep?BluetoothSocket.connect是一个阻塞调用。这意味着在connect返回成功连接或抛出异常之前,不会调用Thread.Sleep。
你是在活动中调用这个吗?因为这会影响你的活动。你应该有3个线程来处理蓝牙,一个接受线程,连接线程和一个连接线程。就像BluetoothChat中的例子:
http://developer.android.com/resources/samples/BluetoothChat/index.html