我可以第一次连接到外部配对的蓝牙硬件。之后如果我重复连接/断开程序有时会出现异常。
Exception = read failed, socket might closed or timeout, read ret: -1
经过多次试验后能够再次连接。有时候第二次试验本身就是成功的
使用设备观察到此问题:Nexux7(版本4.3)和MotoG(Kitkat)
连接代码:
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(devAddress);
socket = device.createRfcommSocketToServiceRecord(MY_UUID);
并从asynctask
调用socket.connect()关闭套接字的代码:主题
if (in != null) {
Logger.loge(CLASS_NAME + "." + "resetConnection", "in != null");
try {
in.close();
} catch (Exception e) {
// Log.d(TAG,"exception in closing inputstream - " + e.getMessage());
}
in = null;
}
if (out != null) {
Logger.loge(CLASS_NAME + "." + "resetConnection", "out != null");
try {
out.close();
} catch (Exception e) {
// Log.d(TAG,"exception in closing outputstream - " + e.getMessage());
}
out = null;
}
if (socket != null) {
Logger.loge(CLASS_NAME + "." + "resetConnection", "socket != null");
try {
socket.close();
} catch (Exception e) {
//Log.d(TAG,"exception in closing socket - " + e.getMessage());
}
socket = null;
}
我已按照链接
https://groups.google.com/forum/#!topic/android-developers/UxY5xME6V5s
Android Bluetooth: java.io.IOException: Service discovery failed
Disconnect a bluetooth socket in Android
android bluetooth can't connect
所提供的解决方案都没有帮助我解决问题。
任何帮助将不胜感激......
由于
答案 0 :(得分:0)
实际问题是,一旦设备连接,套接字将打开。当其中一个套接字关闭时,另一个套接字未关闭。当您尝试重新连接另一个设备时,不接受新套接字。
解决方案是当任何一个断开连接时,您需要在侧面重新初始化连接服务,即您需要在两侧正确关闭套接字。然后回到监听模式。然后只有新的套接字连接才会接受。click Here code reference using AndroiddChat example.
答案 1 :(得分:0)
当我构建一个涉及蓝牙连接的应用时,我遇到了类似的问题。搜索了很长时间后,我找到了this solution。