title: Disconnect a bluetooth socket in Android
body: <p>I'm developing a program in which, from an Android Phone, I have to connect as a client to a Bluetooth medical sensor. I'm using the official Bluetooth API and no problem during connection (SPP profile), but when I end the socket, the sensor is still connected to my phone (although I have close the connection).</p>
  
  <p>Are there any way to make a Bluetooth disconnection? I think there is an intent called ACTION_ACL_CONNECTED, which does that. Can anyone explain me how to use this?</p>
  
  <p>Thanks in advance.</p>
  
  <p>EDITED: Here is the code, if anyone needs additional info, it's a Nonin 4100 medical sensor.</p>
  
  <pre><code>Set&lt;BluetoothDevice&gt; pairedDevices = Activa.myBluetoothAdapter.getBondedDevices();
          // If there are paired devices
          if (pairedDevices.size() &gt; 0) {
              // Loop through paired devices
              for (BluetoothDevice device : pairedDevices) {
                  // Add the name and address to an array adapter to show in a ListView
                  String name = device.getName();
                  if (name.contains("Nonin")) {
                      try {
                          found = true;
  //                      socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
  //                      handler.sendEmptyMessage(5);
  //                      Activa.myBluetoothAdapter.cancelDiscovery();
  //                      socket.connect();
                          BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(device.getAddress());
                          Method m;
                          try {
                              m = hxm.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
                              socket = (BluetoothSocket)m.invoke(hxm, Integer.valueOf(1));
                              handler.sendEmptyMessage(5);
                              socket.connect();
                          } catch (Exception e) {
                              handler.sendEmptyMessage(7);
                              e.printStackTrace();
                              break;
                          }
                          handler.sendEmptyMessage(6);
                          InputStream in = socket.getInputStream();
                          OutputStream out = socket.getOutputStream();
                          byte[] retrieve = { 0x44, 0x31};
                          out.write(retrieve);
                          byte [] ack = new byte [1];
                          in.read(ack);
                          if (ack[0] == 0x15) {
                              cancelMeasurement();
                              return;
                          }
                          byte [] data = new byte [3];
                          long timeStart = System.currentTimeMillis();
                          this.timePassed = System.currentTimeMillis() - timeStart;
                          while ((this.timePassed &lt; (this.time))&amp;&amp;(this.finished)) {
                              try {
                                  in.read(data);
                                  processData(data);
                                  Thread.sleep(1000);
                                  this.timePassed = System.currentTimeMillis() - timeStart;
                              } catch (Exception e) {
                                  e.printStackTrace();
                              }
                          }
                          in.close();
                          out.close();
                          socket.close();
                      } catch (IOException e) {
                          e.printStackTrace();
                      }
                  }
              }
          }
  }
  </code></pre>