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

27,449

In the constructor of BluetoothConnector.java, a list of uuidCandidates is passed.

public BluetoothConnector(BluetoothDevice device, boolean secure, BluetoothAdapter adapter,
                              List<UUID> uuidCandidates) 
          {
        this.device = device;
        this.secure = secure;
        this.adapter = adapter;
        this.uuidCandidates = uuidCandidates;

        if (this.uuidCandidates == null || this.uuidCandidates.isEmpty()) {
            this.uuidCandidates = new ArrayList<UUID>();
            this.uuidCandidates.add(UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66"));
        }
    }

Have you passed it null?

If yes,then try calling device.fetchUuidsWithSdp() for the Bluetooth device you want to connect and receive BluetoothDevice.ACTION_UUID intent in your receiver.As this will fetch a list of uuids supported for the device.

Share:
27,449
Java_begins
Author by

Java_begins

starting from start

Updated on April 28, 2020

Comments

  • Java_begins
    Java_begins about 4 years

    I am trying to connect devices through my app installed in Nexus 5.I want to make an app like rainbow contacts in android. In my app I aim to connect to another device through Bluetooth and transfer set of contacts or files. I followed this question, but the workaround mentioned there is not working for me Here is my full code. This is the code snippet from my application where I have tried to get the socket and make connections.

    I am able to get through pairing device dialog ,but when i trying to paired then error is raised

    //to create socket
    if (secure) {
                bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);
            } else {
                bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
            }
    //connection establishment
    try {
    
                    bluetoothSocket.connect();
                    success = true;
                    break;
                } catch (IOException e) {
                    //try the fallback
                    try {
                        Class<?> clazz = tmp.getRemoteDevice().getClass();
                        Class<?>[] paramTypes = new Class<?>[] {Integer.TYPE};
                        Method m = clazz.getMethod("createRfcommSocket", paramTypes);
                        Object[] params = new Object[] {Integer.valueOf(1)};
                        bluetoothSocket  = (BluetoothSocket) m.invoke(tmp.getRemoteDevice(), params);
                        Thread.sleep(500);
                        bluetoothSocket.connect();
                        success = true;
                        break;
                    } catch (FallbackException e1) {
                        Log.w("BT", "Could not initialize FallbackBluetoothSocket classes.", e);
                    } catch (InterruptedException e1) {
                        Log.w("BT", e1.getMessage(), e1);
                    } catch (IOException e1) {
                        Log.w("BT", "Fallback failed. Cancelling.", e1);
                    }
                }
    

    Error I am getting

    09-06 13:44:57.247  27860-27860/com.example.gauravdubey.myapplication I/BT﹕ Attempting to connect to Protocol: 00001101-0000-1000-8000-00805f9b34fb
    09-06 13:44:57.247  27860-27860/com.example.gauravdubey.myapplication W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback
    09-06 13:44:57.247  27860-27860/com.example.gauravdubey.myapplication D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[56]}
    09-06 13:44:58.667  27860-27860/com.example.gauravdubey.myapplication W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback
    09-06 13:44:58.667  27860-27860/com.example.gauravdubey.myapplication D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[59]}
    09-06 13:45:03.267  27860-27860/com.example.gauravdubey.myapplication W/BT﹕ Fallback failed. Cancelling.
        java.io.IOException: read failed, socket might closed or timeout, read ret: -1
                at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
                at android.bluetooth.BluetoothSocket.waitSocketSignal(BluetoothSocket.java:482)
                at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:324)
                at com.example.gauravdubey.myapplication.BluetoothConnector$FallbackBluetoothSocket.connect(BluetoothConnector.java:198)
                at com.example.gauravdubey.myapplication.BluetoothConnector.connect(BluetoothConnector.java:62)
                at com.example.gauravdubey.myapplication.ConnectThread.run(ConnectThread.java:101)
                at com.example.gauravdubey.myapplication.MainActivity$1.onItemClick(MainActivity.java:288)
                at android.widget.AdapterView.performItemClick(AdapterView.java:299)
                at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
                at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
                at android.widget.AbsListView$3.run(AbsListView.java:3645)
                at android.os.Handler.handleCallback(Handler.java:733)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5001)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                at dalvik.system.NativeStart.main(Native Method)
    09-06 13:45:03.267  27860-27860/com.example.gauravdubey.myapplication V/connectThread﹕ Could not connect to device: B0:D0:9C:8B:A4:47
    09-06 13:45:03.267  27860-27860/com.example.gauravdubey.myapplication I/Choreographer﹕ Skipped 361 frames!  The application may be doing too much work on its main thread.
    

    So what i am doing wrong ? any help would be appreciated

    • user207421
      user207421 over 9 years
      "java.io.IOException: read failed, socket might closed or timeout, read ret: -1" Is that illiterate and incorrect error message really what was printed? Hard to believe, and it needs attention if true.
    • Java_begins
      Java_begins over 9 years
      @EJP Yes the error message was same I tried everything possible. If you want I Can give you complete logs.
    • Java_begins
      Java_begins over 9 years
      @EJP Here is Complete error log. I am able to get pair screen but whenever i am trying to pair devices it shows me error.
    • user207421
      user207421 over 9 years
      A note to the Android developers: "read failed, socket might closed or timeout" is a truly terrible error message. (1) It's illiterate if quoted here accurately (2) a timeout is completely different from a peer close is completely different from a local close: they should not be conflated (3) a timeout should be reported by SocketTimeoutException (4) a local close should be reported by SocketException: socket is closed (5) a peer close should be reported by read() returning -1 etc.
    • ThomasW
      ThomasW about 9 years
      I wrote up the grammar error here: code.google.com/p/android/issues/detail?id=159898
    • ThomasW
      ThomasW about 9 years
      The source file that the message appears in is line 512 of android.googlesource.com/platform/frameworks/base/+/master/c‌​ore/…
  • Java_begins
    Java_begins over 9 years
    I tired you code withing the try block and also trying with another UUID . Doesn't help
  • kalup
    kalup over 9 years
    Have you tried 3rd method? I would use it within MainActivity.onItemClick, befor launching ConnectThread. Moreover, try BluetoothChatExample on those devices and look if it works
  • Java_begins
    Java_begins over 9 years
    @Gaurav_Dubey Thanks it works for now , I am able to make connection
  • Paride Letizia
    Paride Letizia over 9 years
    Hi, I have same error but I don't understand how to use your code. If I pass null value on uuidCandidates, what I have to do later? Could you write a complete example? Thanks in advance