后ICS版本中的蓝牙连接问题

时间:2014-03-28 04:59:15

标签: java android sockets bluetooth android-bluetooth

我可以第一次连接到外部配对的蓝牙硬件。之后如果我重复连接/断开程序有时会出现异常。

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

所提供的解决方案都没有帮助我解决问题。

任何帮助将不胜感激......

由于

2 个答案:

答案 0 :(得分:0)

实际问题是,一旦设备连接,套接字将打开。当其中一个套接字关闭时,另一个套接字未关闭。当您尝试重新连接另一个设备时,不接受新套接字。

解决方案是当任何一个断开连接时,您需要在侧面重新初始化连接服务,即您需要在两侧正确关闭套接字。然后回到监听模式。然后只有新的套接字连接才会接受。click Here code reference using AndroiddChat example.

答案 1 :(得分:0)

当我构建一个涉及蓝牙连接的应用时,我遇到了类似的问题。搜索了很长时间后,我找到了this solution