1. get a BluetoothAdapter instance by BluetoothAdapter.getDefaultAdapter();
2. use an intent with uri BluetoothAdapter.ACTION_REQUEST_ENABLE to open the blue tooth
3. get a devices Set by adapter.getBondedDevices();
Or:
1. get a BluetoothAdapter instance by BluetoothAdapter.getDefaultAdapter();
2. new a BroadcastReceiver Child to receive the intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
3. use bluetoothAdapter.startDiscovery() to search surounding bluetooth device . It is an asynchronous
function and will send the intent with BluetoothDevice.EXTRA_DEVICE
BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.i("l","address:"+device.getAddress());
Make your device discoverable:
Intent discoverableIntent=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 500); startActivity(discoverableIntent);
Don't forget the permission:
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Full code:
package com.blue_tooth_test; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; 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.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import java.util.Iterator; import java.util.Set; public class BlueToothTest extends Activity { private Button btn; private Button btn2; private Button btn3; private LinearLayout ll; private BluetoothAdapter bluetoothAdapter; private BluetoothReceiver bluetoothReceiver; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ll=new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams params=new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); btn=new Button(this); btn.setText("Bluetooth Scan"); btn.setOnClickListener(clickListener); btn2=new Button(this); btn2.setText("Set visible"); btn2.setOnClickListener(clickListener2); btn3=new Button(this); btn3.setText("Scan device"); btn3.setOnClickListener(clickListener3); ll.addView(btn,params); ll.addView(btn2,params); ll.addView(btn3,params); setContentView(ll); bluetoothAdapter=BluetoothAdapter.getDefaultAdapter(); bluetoothReceiver=new BluetoothReceiver(); IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); this.registerReceiver(bluetoothReceiver, intentFilter); } private OnClickListener clickListener=new OnClickListener(){ public void onClick(View arg0) { // throw new UnsupportedOperationException("Not supported yet."); //1. get a BluetoothAdapter instance; BluetoothAdapter adapter=BluetoothAdapter.getDefaultAdapter(); if(adapter!=null){ Log.i("l","Bluetooth device OK"); //2. if current bluetooth enable if(!adapter.isEnabled()){ Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); BlueToothTest.this.startActivity(intent); } //3. get all the paired bluetooth device //that means the remote device list; Set<BluetoothDevice> devices=adapter.getBondedDevices(); if(devices.size()>0){ Iterator iter=devices.iterator(); while(iter.hasNext()){ BluetoothDevice bluetoothDevice=(BluetoothDevice)iter.next(); Log.i("l","address:"+bluetoothDevice.getAddress()); } } } else{ Log.i("l","No bluetooth device"); } } }; private OnClickListener clickListener2=new OnClickListener(){ public void onClick(View arg0) { // throw new UnsupportedOperationException("Not supported yet."); Intent discoverableIntent=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 500); startActivity(discoverableIntent); } }; private OnClickListener clickListener3=new OnClickListener(){ public void onClick(View arg0) { // throw new UnsupportedOperationException("Not supported yet."); // The discovery process usually involves an inquiry scan of about 12 seconds, followed by a page scan of each new device to retrieve its Bluetooth name. // This is an asynchronous call, it will return immediately. Register for ACTION_DISCOVERY_STARTED and ACTION_DISCOVERY_FINISHED intents to determine exactly // when the discovery starts and completes. Register for ACTION_FOUND to be notified as remote Bluetooth devices are found. // Device discovery is a heavyweight procedure. New connections to remote Bluetooth devices should not be attempted while discovery is in progress, and existing // connections will experience limited bandwidth and high latency. Use cancelDiscovery() to cancel an ongoing discovery. Discovery is not managed by the Activity, // but is run as a system service, so an application should always call cancelDiscovery() even if it did not directly request a discovery, just to be sure. // Device discovery will only find remote devices that are currently discoverable (inquiry scan enabled). Many Bluetooth devices are not discoverable by default, // and need to be entered into a special mode. // If Bluetooth state is not STATE_ON, this API will return false. After turning on Bluetooth, wait for ACTION_STATE_CHANGED with STATE_ON to get the updated value. boolean result=bluetoothAdapter.startDiscovery(); Log.i("l","is any connectable device?:"+result); } }; @Override protected void onDestroy() { super.onDestroy(); this.unregisterReceiver(bluetoothReceiver); } private class BluetoothReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // throw new UnsupportedOperationException("Not supported yet."); Log.i("l","received device"); String action=intent.getAction(); if(BluetoothDevice.ACTION_FOUND.equals(action)){ BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.i("l","address:"+device.getAddress()); } } } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.blue_tooth_test" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <application android:label="@string/app_name" > <activity android:name="BlueToothTest" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>