title: making bluetooth connection with other device
body: <p>I'm facing problem when trying to connect to other devices on my android app</p>
  
  <p>the devices are shown on a list but i can't make connection from my application!</p>
  
  <p>here is the code for that:</p>
  
  <p>bluetooth.java:</p>
  
  <pre><code>package com.csp.carservices;
  
  import android.app.Activity;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  import android.bluetooth.BluetoothServerSocket;
  import android.bluetooth.BluetoothSocket;
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.ArrayAdapter;
  import android.widget.Button;
  import android.widget.ListView;
  import android.widget.Toast;
  import android.widget.ToggleButton;
  
  import java.io.IOException;
  import java.util.Set;
  import java.util.UUID;
  
  public class Bluetooth extends AppCompatActivity {
  
  
  private final static UUID uuid = UUID.fromString("59b4fb6c-5c46-4867-93fc-f46e072f3b87");
  
  // 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());
          }
      }
  };
  
  private BluetoothAdapter bluetoothAdapter;
  private ToggleButton toggleButton;
  private Button dis;
  private ListView listview;
  private ArrayAdapter adapter;
  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;
  
  
  @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);
  
      adapter = new ArrayAdapter
              (this,android.R.layout.simple_list_item_1);
      listview.setAdapter(adapter);
      bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  
  
      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();
  
          }
      });
  
  }
  
  
  
  
  public void onToggleClicked(View view) {
  
      adapter.clear();
  
      ToggleButton toggleButton = (ToggleButton) view;
  
      if (bluetoothAdapter == null) {
          // Device does not support Bluetooth
          Toast.makeText(getApplicationContext(), "Oop! Your device does not support 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(), "Your device has already been enabled." +
                                  "\n" + "Scanning for remote Bluetooth devices...",
                          Toast.LENGTH_SHORT).show();
                  // To discover remote Bluetooth devices
                  discoverDevices();
                  // Make local device discoverable by other devices
                  makeDiscoverable();
  
                  ListeningThread t = new ListeningThread();
                  t.start();
  
  
              }
          } else { // Turn off bluetooth
  
              bluetoothAdapter.disable();
              adapter.clear();
              Toast.makeText(getApplicationContext(), "Your device is now disabled.",
                      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(), "Ha! Bluetooth is now enabled." +
                              "\n" + "Scanning for remote Bluetooth devices...",
                      Toast.LENGTH_SHORT).show();
  
              // Make local device discoverable by other devices
              makeDiscoverable();
  
              // To discover remote Bluetooth devices
              discoverDevices();
  
          } else { // RESULT_CANCELED as user refused or failed to enable Bluetooth
              Toast.makeText(getApplicationContext(), "Bluetooth is not enabled.",
                      Toast.LENGTH_SHORT).show();
  
              // Turn off togglebutton
              toggleButton.setChecked(false);
          }
      } else if (requestCode == DISCOVERABLE_BT_REQUEST_CODE){
  
          if (resultCode == DISCOVERABLE_DURATION){
              Toast.makeText(getApplicationContext(), "Your device is now discoverable by other devices for " +
                              DISCOVERABLE_DURATION + " seconds",
                      Toast.LENGTH_SHORT).show();
          } else {
              Toast.makeText(getApplicationContext(), "Fail to enable discoverability on your device.",
                      Toast.LENGTH_SHORT).show();
          }
      }
  }
  
  protected void discoverDevices(){
  
      // To scan for remote Bluetooth devices
      if (bluetoothAdapter.startDiscovery()) {
          Toast.makeText(getApplicationContext(), "Discovering other bluetooth devices...",
                  Toast.LENGTH_SHORT).show();
  
  
      } else {
          Toast.makeText(getApplicationContext(), "Discovery failed to start.",
                  Toast.LENGTH_SHORT).show();
      }
  }
  
  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);
  
  }
  
  
  
  @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
      // as you specify a parent activity in AndroidManifest.xml.
      int id = item.getItemId();
      if (id == R.id.action_settings) {
          return true;
      }
      return super.onOptionsItemSelected(item);
  }
  
  private class ListeningThread extends Thread {
      private final BluetoothServerSocket bluetoothServerSocket;
  
      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;
          // This will block while listening until a BluetoothSocket is returned
          // or an exception occurs
          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(), "A connection has been accepted.",
                                  Toast.LENGTH_SHORT).show();
                      }
                  });
  
                  // Code to manage the connection in a separate thread
                 /*
                     manageBluetoothConnection(bluetoothSocket);
                 */
  
                  try {
                      bluetoothServerSocket.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
                  break;
              }
          }
      }
  
      // Cancel the listening socket and terminate the thread
      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.createRfcommSocketToServiceRecord(uuid);
          } catch (IOException e) {
              e.printStackTrace();
          }
          bluetoothSocket = temp;
      }
  
      public void run() {
          // Cancel discovery as it will slow down the connection
          bluetoothAdapter.cancelDiscovery();
  
          try {
              // This will block until it succeeds in connecting to the device
              // through the bluetoothSocket or throws an exception
              bluetoothSocket.connect();
  
          } catch (IOException connectException) {
              connectException.printStackTrace();
              try {
                  bluetoothSocket.close();
              } catch (IOException closeException) {
                  closeException.printStackTrace();
              }
          }
  
          // Code to manage the connection in a separate thread
          /*
             manageBluetoothConnection(bluetoothSocket);
          */
      }
  
      // Cancel an open connection and terminate the thread
      public void cancel() {
          try {
              bluetoothSocket.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>activity_bluetooth.xml:</p>
  
  <pre><code>&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:paddingBottom="@dimen/activity_vertical_margin"
  tools:context="com.csp.carservices.Bluetooth"&gt;
  &lt;ToggleButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/toggleButton"
      android:textOn="Bluetooth On"
      android:textOff="Bluetooth Off"
      android:onClick="onToggleClicked"
      android:layout_alignParentTop="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" /&gt;
  
  &lt;ListView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/listView"
      android:layout_centerHorizontal="true"
      android:layout_below="@+id/toggleButton" /&gt;
  
  
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>can anyone help?</p>