1

Bluetooth is paired, using BluetoothSocket.connect() but throws exception

java.io.IOException: read failed, socket might closed or timeout, read ret: -1"

Here is my code:

public class BluetoothClientConnThread extends Thread {
//  Debugging
private static final String TAG = "BluetoothClientConnThread";
private static final boolean D = true;

//  用于回传消息的Handler
private Handler mmHandler;

//  服务器设备
private BluetoothDevice mmDevice;

//  Socket对象
private BluetoothSocket mmSocket;

//  SDK版本号
private int sdk_version;

public BluetoothClientConnThread(Handler handler, BluetoothDevice device, int sdk_version) {
    this.mmHandler = handler;
    this.mmDevice = device;
    this.sdk_version = sdk_version;
}

@Override
public void run() {     
    //  取消发现设备
    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
    try {
        if(D)Log.i(TAG, "Android SDK版本:" + sdk_version);
        if(sdk_version >= 10)
        {
            mmSocket = mmDevice.createInsecureRfcommSocketToServiceRecord(BluetoothTools.MY_UUID);
        }
        else
        {
            mmSocket = mmDevice.createRfcommSocketToServiceRecord(BluetoothTools.MY_UUID);
        }

        mmSocket.connect();
    } catch (IOException e) {
        try {
            mmSocket.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        mmHandler.obtainMessage(BluetoothTools.MESSAGE_CONNECT_ERROR).sendToTarget();
        return;
    }


    Message msg = mmHandler.obtainMessage();
    msg.what = BluetoothTools.MESSAGE_CONNECT_OK;
    msg.obj = mmSocket;
    msg.sendToTarget();
}

public void cancel() {
    try {
        if(sdk_version >= 10)
        {
            mmSocket = mmDevice.createInsecureRfcommSocketToServiceRecord(BluetoothTools.MY_UUID);
        }
        else
        {
            mmSocket = mmDevice.createRfcommSocketToServiceRecord(BluetoothTools.MY_UUID);
        }
        mmSocket.close();
        //  发送关闭连接的消息
        mmHandler.obtainMessage(BluetoothTools.MESSAGE_CLOSE_CONNECT).sendToTarget();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

Can anyone explain why I am getting this error?

codeMagic
  • 44,549
  • 13
  • 77
  • 93
user20140705
  • 11
  • 1
  • 5
  • This has been answered at this thread : http://stackoverflow.com/questions/18657427/ioexception-read-failed-socket-might-closed-bluetooth-on-android-4-3 – lafolle Nov 05 '14 at 19:25
  • Or you can try the solution proposed here: http://stackoverflow.com/questions/25698585/bluetooth-connection-failed-java-io-ioexception-read-failed-socket-might-clos – ThomasW Mar 13 '15 at 10:06

0 Answers0