The previous article introduced three methods of phone pairing connection. This article describes how to search for Bluetooth devices and actively pair and connect to them using a complete code example.
Package jason.com; import java. io. IOException; import java. lang. reflect. method; import java. util. arrayList; import java. util. list; import java. util. UUID; import android. app. activity; import android. bluetooth. export thadapter; import android. bluetooth. export thdevice; import android. bluetooth. export thsocket; import android. content. broadcastReceiver; import android. content. context; import android. content. intent; import android. content. intentFilter; import android. OS. bundle; import android. util. log; 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; public class extends thtestactivity extends Activity {// This UUID indicates the serial port service static final String SPP_UUID = "Courier"; Button btnSearch, btnDis, btnExit; ToggleButton tbtnSwitch; ListView lvBTDevices; ArrayAdapter
AdtDevices; List
LstDevices = new ArrayList
(); Fig; public static fig; @ Overridepublic void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. main); // Button set btnSearch = (Button) this. findViewById (R. id. btnSearch); btnSearch. setOnClickListener (new ClickEvent (); btnExit = (Button) this. findViewById (R. id. btnExit); btnExit. setOnClickListener (new ClickEvent (); btnDis = (Button) this. findViewById (R. id. btnDis); btnDis. setOnClickListener (new ClickEvent (); // ToogleButton sets tbtnSwitch = (ToggleButton) this. findViewById (R. id. tbtnSwitch); tbtnSwitch. setOnClickListener (new ClickEvent (); // ListView and its data source adapter lvBTDevices = (ListView) this. findViewById (R. id. lvDevices); adtDevices = new ArrayAdapter
(This, android. r. layout. simple_list_item_1, lstDevices); lvBTDevices. setAdapter (adtDevices); lvBTDevices. setOnItemClickListener (new ItemClickEvent (); btAdapt = descrithadapter. getdefaadapter adapter (); // initialize the local Bluetooth function // ====================================== ========================================/// modified by jason0539 search for jason0539 to enter my blog/** if (btAdapt. getState () = descrithadapter. STATE_OFF) // read the Bluetooth status and display * tbtnSwitch. setChecked (false); else if (btAdapt. getState () = * initialize thadapter. STATE_ON) tbtnSwitch. setChecked (true); */if (btAdapt. isEnabled () {tbtnSwitch. setChecked (false);} else {tbtnSwitch. setChecked (true );} // ================================================ ======================================/// register a Receiver to obtain the result of the bluetooth device IntentFilter intent = new IntentFilter (); intent. addAction (descrithdevice. ACTION_FOUND); // use BroadcastReceiver to obtain the search result intent. addAction (descrithdevice. ACTION_BOND_STATE_CHANGED); intent. addAction (descrithadapter. ACTION_SCAN_MODE_CHANGED); intent. addAction (descrithadapter. ACTION_STATE_CHANGED); registerReceiver (searchDevices, intent);} private BroadcastReceiver searchDevices = new BroadcastReceiver () {public void onReceive (Context context, Intent intent) {String action = intent. getAction (); Bundle B = intent. getExtras (); Object [] lstName = B. keySet (). toArray (); // display all received messages and their details for (int I = 0; I <lstName. length; I ++) {String keyName = lstName [I]. toString (); Log. e (keyName, String. valueOf (B. get (keyName);} retrieve thdevice device = null; // retrieve the device's MAC address if (retrieve thdevice. ACTION_FOUND.equals (action) {device = intent. getParcelableExtra (effecthdevice. EXTRA_DEVICE); if (device. getBondState () = descrithdevice. BOND_NONE) {String str = "unpaired |" + device. getName () + "|" + device. getAddress (); if (lstDevices. indexOf (str) =-1) // prevents repeated addition of lstDevices. add (str); // obtain the device name and mac address adtDevices. notifyDataSetChanged () ;}} else if (descrithdevice. ACTION_BOND_STATE_CHANGED.equals (action) {device = intent. getParcelableExtra (effecthdevice. EXTRA_DEVICE); switch (device. getBondState () {case when thdevice. BOND_BONDING: Log. d ("maid", "pairing ...... "); break; case when thdevice. BOND_BONDED: Log. d ("complete thtestactivity", "complete pairing"); connect (device); // connect to the device break; case when thdevice. BOND_NONE: Log. d ("cancthtestactivity", "unpairing"); default: break ;}}};@ Overrideprotected void onDestroy () {this. unregisterReceiver (searchDevices); super. onDestroy (); android. OS. process. killProcess (android. OS. process. myPid ();} class ItemClickEvent implements AdapterView. onItemClickListener {@ Overridepublic void onItemClick (AdapterView
Arg0, View arg1, int arg2, long arg3) {if (btAdapt. isDiscovering () btAdapt. cancelDiscovery (); String str = lstDevices. get (arg2); String [] values = str. split ("\\|"); String address = values [2]; Log. e ("address", values [2]); then thdevice btDev = btAdapt. getRemoteDevice (address); try {Boolean returnValue = false; if (btDev. getBondState () = descrithdevice. BOND_NONE) {// call thinthdevice using the reflection method. createBond (Blu Descrithdevice remoteDevice); Method createBondMethod = descrithdevice. class. getMethod ("createBond"); Log. d ("Maid activity", "start pairing"); returnValue = (Boolean) createBondMethod. invoke (btDev);} else if (btDev. getBondState () = descrithdevice. BOND_BONDED) {connect (btDev) ;}} catch (Exception e) {e. printStackTrace () ;}} private void connect (effecthdevice btDev) {UUID uuid = UUID. fromString (SPP_UUID ); Try {btSocket = btDev. createRfcommSocketToServiceRecord (uuid); Log. d ("thtestactivity", "Start to connect... "); btSocket. connect ();} catch (IOException e) {// TODO Auto-generated catch blocke. printStackTrace () ;}} class ClickEvent implements View. onClickListener {@ Overridepublic void onClick (View v) {if (v = btnSearch) // search for a bluetooth device and display the result in BroadcastReceiver {if (btAdapt. getState () = descrithadapter. STATE_OFF ){/ /If Toast is not enabled for Bluetooth. makeText (effecthtestactivity. this, "Please turn on Bluetooth first", 1000 ). show (); return;} if (btAdapt. isDiscovering () btAdapt. cancelDiscovery (); lstDevices. clear (); Object [] lstDevice = btAdapt. getBondedDevices (). toArray (); for (int I = 0; I <lstDevice. length; I ++) {effecthdevice device = (effecthdevice) lstDevice [I]; String str = "paired |" + device. getName () + "|" + device. getAddress (); lstDevices. add (str); // Obtain the device name and mac address adtDevices. notifyDataSetChanged ();} setTitle ("local Bluetooth address:" + btAdapt. getAddress (); btAdapt. startDiscovery ();} else if (v = tbtnSwitch) {// start/Close the local Bluetooth if (tbtnSwitch. isChecked () = false) btAdapt. enable (); else if (tbtnSwitch. isChecked () = true) btAdapt. disable ();} else if (v = btnDis) // the local machine can be searched for {Intent discoverableIntent = new Intent (effecthadapter. ACTION_REQUEST_DISCOVERABLE); discovera BleIntent. putExtra (effecthadapter. EXTRA_DISCOVERABLE_DURATION, 300); startActivity (discoverableIntent);} else if (v = btnExit) {try {if (btSocket! = Null) btSocket. close () ;}catch (IOException e) {e. printStackTrace () ;}%thtestactivity. this. finish ();}}}}