我正在尝试使用我的Android应用程序连接蓝牙设备。到目前为止它的工作正常。
现在问题是当我的设备超出范围时,我显示一个对话框并要求用户重新连接。
有时我能够重新连接设备,有时我会收到错误,即
Service Discovery Failed
我真的不知道为什么会发生
private class ConnectThread extends Thread {
public ConnectThread() {
try {
bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(UUID);
} catch (IOException e) {
System.out.println("IO EXCEPTION" + e.getMessage() +"");
}
}
public void run() {
bluetoothAdapter.cancelDiscovery();
try {
// I AM GETTING ERROR HERE
bluetoothSocket.connect();
} catch (IOException connectException) {
Log.d("Exception : ConnectThread -> Run" , connectException.getMessage()+"");
try {
bluetoothSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return;
}
}
}
答案 0 :(得分:0)
根据经验,今天实际上遇到同样的问题,
如果我要推测,我会说你的其他设备,断开连接(链接丢失)没有立即检测到它已断开连接(如果我记得可能需要30秒),或者它只是表现不好。
因此,它不会重新转换SDP上的服务(不会再次打开套接字),所以当Android启动连接(作为客户端)时,服务器失败 - 没有打开套接字。
您应该发布其他设备日志。并尝试使用其他设备 - 但Android手机和代码相同!
再次,只是一个猜测。
答案 1 :(得分:0)
我有同样的问题;我的解决方案可能特定于我正在使用的设备,但我发现通过在最后一次与套接字的通信和socket.close()之间休眠1000毫秒,它会重启成功。