title: How to connect the Bluetooth device by click the item of listview in Android?
body: <p>I am developing an application where I have to connect to Bluetooth device on Android 4.3.</p>
  
  <p>I can scan the bluetooth device, but it can not connect the bluetooth device.</p>
  
  <p>I have already add the permission in Manifest of the following:</p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /&gt;
  &lt;uses-permission android:name="android.permission.BLUETOOTH" /&gt;
  </code></pre>
  
  <p>My Operation is when I push SCAN Button, it will scan the Bluetooth device and show on the ListView.</p>
  
  <p>When I click the bluetooth device on ListView,it will connect the bluetooth device of item.</p>
  
  <p>But when I click the device item, the app will crash, and I don't know why...</p>
  
  <p>This is my java code:</p>
  
  <pre><code>     package com.example.preventthelost;
  
  
          import java.io.IOException;
          import java.net.Socket;
          import java.util.Set;
          import java.util.UUID;
  
          import android.os.Bundle;
          import android.app.Activity;
          import android.app.AlertDialog;
          import android.bluetooth.BluetoothAdapter;
          import android.bluetooth.BluetoothDevice;
          import android.bluetooth.BluetoothSocket;
          import android.widget.AdapterView;
          import android.widget.AdapterView.OnItemClickListener;
          import android.widget.ArrayAdapter;
          import android.widget.Button;
          import android.widget.ListView;
          import android.widget.TextView;
          import android.content.BroadcastReceiver;
          import android.content.Context;
          import android.content.DialogInterface;
          import android.content.Intent;
          import android.content.IntentFilter;
          import android.util.Log;
          import android.view.Menu;
          import android.view.View;
          import android.view.View.OnClickListener;
          import android.widget.Toast;
  
          public class DeviceList extends Activity {
  
              protected static final String tag = "TAG";
              private BluetoothAdapter mBluetoothAdapter;
              private static final int REQUEST_ENABLE_BT=1;
              private Button btn_cancel;
              private Button btn_scan;
              private ListView pair_devices_list;
              private ListView new_devices_list;
              private Set&lt;BluetoothDevice&gt; pairedDevice;
              private ArrayAdapter&lt;String&gt; newDevicelistArrayAdapter;
              private ArrayAdapter&lt;String&gt; pairDevicelistArrayAdapter;
              private final UUID my_UUID = UUID.fromString("00001802-0000-1000-8000-00805f9b34fb");
              //private final UUID my_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
              private BluetoothSocket socket;
  
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.device_list);
  
                  btn_scan = (Button)findViewById(R.id.btn_scan);
  
                  newDevicelistArrayAdapter = new ArrayAdapter&lt;String&gt;(this, R.layout.device_name);
                  new_devices_list = (ListView)findViewById(R.id.new_devices_list);
                  new_devices_list.setAdapter(newDevicelistArrayAdapter);
  
  
          　　　　　　　　　**//check device support bluetooth or not**
                  mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                  if(mBluetoothAdapter == null) {
                      Toast.makeText(this, "No support bluetooth", Toast.LENGTH_SHORT).show();
                      finish();
                      return;
                  }else if(!mBluetoothAdapter.isEnabled()){ **//if bluetooth is close, than open it**
                      Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                      startActivityForResult(enableBTIntent, REQUEST_ENABLE_BT);
                  }
  
  
                  **//click the scan button**
                  btn_scan.setOnClickListener(new OnClickListener() {         
                      @Override
                      public void onClick(View v) {
                          // TODO Auto-generated method stub
  
                          //**list the bluetooth device**
                          IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
                          registerReceiver(mReceiver, filter);
                          mBluetoothAdapter.startDiscovery();
                          newDevicelistArrayAdapter.clear();
                      }
                  });
  
                  //new_devices_list click
                  new_devices_list.setOnItemClickListener(new OnItemClickListener() {
                      @Override
                      public void onItemClick(AdapterView&lt;?&gt; arg0, View arg1, int arg2,
                              long arg3) {
                          // TODO Auto-generated method stub          
  
                          mBluetoothAdapter.cancelDiscovery();
                          final String info = ((TextView) arg1).getText().toString();
  
  　　　　　　　　　　　　　//get the device address when click the device item
                          String address = info.substring(info.length()-19);
  
                       //connect the device when item is click
      　　　　　　　　　　BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);
  
                      try {
                          socket = connect_device.createRfcommSocketToServiceRecord(my_UUID);
                          socket.connect();
                      } catch (IOException e) {
                          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
  
                      }
                  });//************new_devices_list end
  
  
              }
  
              public final BroadcastReceiver mReceiver = new BroadcastReceiver() {
  
                  @Override
                  public void onReceive(Context context, Intent intent) {
                      // TODO Auto-generated method stub
                      String action = intent.getAction();
                      if(BluetoothDevice.ACTION_FOUND.equals(action)) {
                          BluetoothDevice bdevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);              
                          //short rssi = intent.getExtras().getShort(BluetoothDevice.EXTRA_RSSI);;
                          if(bdevice.getBondState() != BluetoothDevice.BOND_BONDED)   
                          newDevicelistArrayAdapter.add("\n" + bdevice.getName() + "\n" + bdevice.getAddress());
                          newDevicelistArrayAdapter.notifyDataSetChanged();
  
                      }
                  }
              };
  
  
              protected void onDestroy() {
  
                  super.onDestroy();
                  if(mBluetoothAdapter != null)
                      mBluetoothAdapter.cancelDiscovery();
                  unregisterReceiver(mReceiver);
              }
  
              public boolean onCreateOptionsMenu(Menu menu) {
                  // Inflate the menu; this adds items to the action bar if it is present.
                  getMenuInflater().inflate(R.menu.device_list, menu);
                  return true;
              }
          }
  </code></pre>
  
  <p>when I type the connect code of following into <code>new_devices_list.setOnItemClickListener</code>, it always crash.</p>
  
  <pre><code>//get the device address when click the device item
  String address = info.substring(info.length()-19);
  
  //connect the device when item is click
  BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);
  
          try {
              socket = connect_device.createRfcommSocketToServiceRecord(my_UUID);
              socket.connect();
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
  </code></pre>
  
  <p>I am not sure, but the problem look like in this line:</p>
  
  <p><code>BluetoothDevice connect_device = mBluetoothAdapter.getRemoteDevice(address);</code> </p>
  
  <p>The data type of the <code>address</code> is String rather address.</p>
  
  <p>But the type of getRemoteDevice I choose is String address.</p>
  
  <p>SO...I don't know Why the app always crash when I type the connect code in new_devices_list even??</p>
  
  <p>Does it can not be use in Android 4.3 ??</p>
  
  <p>Can someone teach me?? </p>
  
  <p>Thanks!!</p>