title: Android bluetooth connection with an obd2
body: <p>Till now my app can discover make discoverable and all these.When i press the device's name for example of my near cellphone(which i have opened the bluetooth) it appears in my listview fact that i want.After when i press it ,i have the classic error &lt;&lt; "W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback
  W/System.err: java.io.IOException: read failed, socket might closed or timeout, read ret: -1 ">>.It doesnt work the bluetoothSocket.connect in my code.
  In other case when i go into my car with my tablet(which includes my app from android studio) i can search the obd2 and when i press it ,it makes the bond requirement.I am keying in the 1234 password and make the bond in tablets bluetooth features where i can see it.I need someone who have did something like this to help me to the next steps.for example how to send a command for rpm or speed and take response.Please help me!</p>
  
  <p>Here is my code:</p>
  
  <p>public class BluetoothActivity extends AppCompatActivity {</p>
  
  <pre><code>private static final String TAG ="msg" ;
  private BluetoothAdapter bluetoothAdapter;
  private ToggleButton toggleButton;
  private ListView listview;
  private ArrayAdapter adapter;
  private static final int MESSAGE_READ =1;
  private static final int ENABLE_BT_REQUEST_CODE = 1;
  private static final int DISCOVERABLE_BT_REQUEST_CODE = 2;
  private static final int DISCOVERABLE_DURATION = 300;
  private final static UUID uuid = UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
  
  // Create a BroadcastReceiver for ACTION_FOUND
  private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
      public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();
          // Whenever a remote Bluetooth device is found
          if (BluetoothDevice.ACTION_FOUND.equals(action)) {
              // Get the BluetoothDevice object from the Intent
              BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
              // Add the name and address to an array adapter to show in a ListView
              adapter.add(bluetoothDevice.getName() + "\n"
                      + bluetoothDevice.getAddress());
              adapter.notifyDataSetChanged();
          }
          //uuid=BluetoothDevice.getUuids()[0].getUuid();
      }
  };
  </code></pre>
  
  <p>// IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);</p>
  
  <p>// registerReceiver(broadcastReceiver, filter) // Don't forget to unregister during onDestroy</p>
  
  <pre><code>@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_bluetooth);
  
      toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
  
      listview = (ListView) findViewById(R.id.listView);
  
  
      //Listview Item Click Listener
      listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {
              String itemValue = (String) listview.getItemAtPosition(position);
              String MAC = itemValue.substring(itemValue.length() - 17);
              BluetoothDevice bluetoothDevice = bluetoothAdapter.getRemoteDevice(MAC);
              // Initiate a connection request in a separate thread
              ConnectingThread t = new ConnectingThread(bluetoothDevice);
              t.start();
          }
      });
  
      adapter = new ArrayAdapter
              (this, android.R.layout.simple_list_item_1);
      listview.setAdapter(adapter);
  
      bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  
  }
  
  //Οταν πατάμε το button για να ανοίξει το bluetooth!
  public void onToggleClicked(View view) {
  
      adapter.clear();
  
      ToggleButton toggleButton = (ToggleButton) view;
      if (bluetoothAdapter == null) {
          // Device does not support Bluetooth
          Toast.makeText(getApplicationContext(), "Η συσκευή δεν υποστηρίζει bluetooth.",
                  Toast.LENGTH_SHORT).show();
          toggleButton.setChecked(false);
      } else {
  
          if (toggleButton.isChecked()){ // to turn on bluetooth
              if (!bluetoothAdapter.isEnabled()) {
                  // A dialog will appear requesting user permission to enable Bluetooth
                  Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                  startActivityForResult(enableBluetoothIntent, ENABLE_BT_REQUEST_CODE);
              } else {
                  Toast.makeText(getApplicationContext(), "Η Συσκευή είναι έτοιμη για χρήση." +
                                  "\n" + "Ανίχνευση για Απομακρυσμένες Συσκευές...",
                          Toast.LENGTH_SHORT).show();
                  // To discover remote Bluetooth devices
                  discoverDevices();
                  // Make local device discoverable by other devices
                  makeDiscoverable();
              }
          } else { // Turn off bluetooth
  
              bluetoothAdapter.disable();
              adapter.clear();
              Toast.makeText(getApplicationContext(), "Η συσκευή έχει Απενεργοποιηθεί.",
                      Toast.LENGTH_SHORT).show();
          }
      }
  }
  
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
  
      if (requestCode == ENABLE_BT_REQUEST_CODE) {
  
          // Bluetooth successfully enabled!
          if (resultCode == Activity.RESULT_OK) {
              Toast.makeText(getApplicationContext(), "Το Bluetooth έχει Ενεργοποιηθεί." +
                              "\n" + "Ανίχνευση για Απομακρυσμένες Συσκευές...",
                      Toast.LENGTH_SHORT).show();
  
              // To discover remote Bluetooth devices
              discoverDevices();
  
              // Make local device discoverable by other devices
              makeDiscoverable();
                // Start a thread to create a  server socket to listen
              // for connection request
              ListeningThread t = new ListeningThread();
              t.start();
  
  
          } else { // RESULT_CANCELED as user refused or failed to enable Bluetooth
              Toast.makeText(getApplicationContext(), "Το Bluetooth δεν έχει Ενεργοποιηθεί.",
                      Toast.LENGTH_SHORT).show();
  
              // Turn off togglebutton
              toggleButton.setChecked(false);
          }
      } else if (requestCode == DISCOVERABLE_BT_REQUEST_CODE){
  
          if (resultCode == DISCOVERABLE_DURATION){
              Toast.makeText(getApplicationContext(), "Η συσκευή είναι τώρα Ανιχνεύσιμη απο άλλες συσκευές..  " +
                              DISCOVERABLE_DURATION + " Δευτερόλεπτα",
                      Toast.LENGTH_SHORT).show();
          } else {
              Toast.makeText(getApplicationContext(), "Αποτυχία να Ενεργοποιηθεί η Ανιχνευσημότητα της Συσκευής.",
                      Toast.LENGTH_SHORT).show();
          }
      }
  }
  
  protected void discoverDevices(){
      // To scan for remote Bluetooth devices
      if (bluetoothAdapter.startDiscovery()) {
          Toast.makeText(getApplicationContext(), "Ανίχνευση για άλλες Συσκευές Bluetooth...",
                  Toast.LENGTH_SHORT).show();
      } else {
          Toast.makeText(getApplicationContext(), "Η Ανίχνευση Απέτυχε να αρχίσει.",
                  Toast.LENGTH_SHORT).show();
      }
  }
   //Συνάρτηση για makeDiscoverable
  protected void makeDiscoverable(){
      // Make local device discoverable
      Intent discoverableIntent = new
              Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
      discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, DISCOVERABLE_DURATION);
      startActivityForResult(discoverableIntent, DISCOVERABLE_BT_REQUEST_CODE);
  }
  
  @Override
  protected void onResume() {
      super.onResume();
      // Register the BroadcastReceiver for ACTION_FOUND
      IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
      this.registerReceiver(broadcastReceiver, filter);
  }
   //on pause an xreiastei na bei kwdikas{}
   @Override
   protected void onPause() {
       super.onPause();
       this.unregisterReceiver(broadcastReceiver);
   }
  @Override
       public boolean onCreateOptionsMenu(Menu menu) {
               // Inflate the menu; this adds items to the action bar if it is present.
               getMenuInflater().inflate(R.menu.bluetooth, menu);
               return true;
            }
  @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      int id = item.getItemId();
      if (id == R.id.action_settings) {
          return true;
      }
      return super.onOptionsItemSelected(item);
  }
  
  //Thread gia ton server..
  private class ListeningThread extends Thread {
      private final BluetoothServerSocket bluetoothServerSocket;
     //Constructor
      public ListeningThread() {
          BluetoothServerSocket temp = null;
          try {
              temp = bluetoothAdapter.listenUsingRfcommWithServiceRecord(getString(R.string.app_name), uuid);
  
          } catch (IOException e) {
              e.printStackTrace();
          }
          bluetoothServerSocket = temp;
      }
  
      public void run() {
          BluetoothSocket bluetoothSocket = null;
          // This will block while listening until a BluetoothSocket is returned
          // or an exception occurs
          Log.d(TAG, "O kwdikas edw trexei");
          while (true) {
              try {
                  bluetoothSocket = bluetoothServerSocket.accept();
              } catch (IOException e) {
                  break;
              }
  
              // If a connection is accepted
              if (bluetoothSocket != null) {
                  //!!!!!!!!!!!!!!!!
                   runOnUiThread(new Runnable() {
                   public void run() {
                  Toast.makeText(getApplicationContext(), "Επιτυχής Σύνδεση με την συσκευή.",
                          Toast.LENGTH_SHORT).show();
                    }
  
                  });
                   ConnectedThread  a = new ConnectedThread(bluetoothSocket);
                    a.start();
                  try {
                      bluetoothServerSocket.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  break;
  
              }
          }
      }
  
      public void cancel() {
          try {
              bluetoothServerSocket.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
  
      }
  }
  
      private class ConnectingThread extends Thread{
          private final BluetoothSocket bluetoothSocket;
          private final BluetoothDevice bluetoothDevice ;
  
          public ConnectingThread(BluetoothDevice device){
              BluetoothSocket temp = null;
              bluetoothDevice = device;
              //Get a BluetoothSocket to connect with the given BluetoothDevice
              try{
  
         temp=bluetoothDevice.createInsecureRfcommSocketToServiceRecord(uuid);
  
              }catch (IOException e){
                  e.printStackTrace();
              }
              bluetoothSocket = temp;
  
              }
  
  
          public void run() {
  
              // Cancel discovery as it will slow down the connection
              bluetoothAdapter.cancelDiscovery();
              try {
  
                  bluetoothSocket.connect();
                  Log.d(TAG, "the code is running");
                  // This will block until it succeeds in connecting to the device
                  // through the bluetoothSocket or throws an exception
                //  bluetoothSocket.connect();
                  //isConnected = true;
              } catch (IOException connectException) {
                  connectException.printStackTrace();
                  try {
                      //unable to connect
  
                      bluetoothSocket.close();
                  } catch (IOException closeException) {
                      closeException.printStackTrace();
                  }
              }
              // Do work to manage the connection (in a separate thread)
              //manageConnectedSocket(bluetoothSocket);
              ConnectedThread  t= new ConnectedThread(bluetoothSocket);
              t.start();
  
          }
  
  
  
      // Cancel an open connection and terminate the thread
      public void cancel() {
          try {
              bluetoothSocket.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  private class ConnectedThread extends Thread {
  
  
      private final BluetoothSocket bluetoothSocket;
      private final InputStream mmInStream;
      private final OutputStream mmOutStream;
      private android.os.Handler mHandler;
  
      public ConnectedThread(BluetoothSocket socket) {
          bluetoothSocket = socket;
          InputStream tmpIn = null;
          OutputStream tmpOut = null;
  
          // Get the input and output streams, using temp objects because
          // member streams are final
          try {
              tmpIn = socket.getInputStream();
              tmpOut = socket.getOutputStream();
          } catch (IOException e) { }
  
          mmInStream = tmpIn;
          mmOutStream = tmpOut;
      }
  
      public void run() {
          byte[] buffer = new byte[1024];  // buffer store for the stream
          int bytes; // bytes returned from read()
  
          // Keep listening to the InputStream until an exception occurs
          while (true) {
              try {
                  // Read from the InputStream
                  bytes = mmInStream.read(buffer);
                  // Send the obtained bytes to the UI activity
  
                  mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                          .sendToTarget();
              } catch (IOException e) {
                  break;
              }
      }
  
      // Call this from the main activity to send data to the remote device
      public void write(byte[] bytes) {
          try {
              mmOutStream.write(bytes);
          } catch (IOException e) { }
      }
  
      // Call this from the main activity to shutdown the connection
      public void cancel() {
          try {
              bluetoothSocket.close();
              mmInStream.close();
              mmOutStream.close();
          } catch (IOException e) { }
      }
  
      public void setmHandler(Handler mHandler) {
          this.mHandler = mHandler;
      }
  }
  </code></pre>
  
  <p>}</p>