Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to scan for available bluetooth devices in range in android?

I need to get a list of available bluetooth devices in the area using google android 2.1.

Thing is, i don't just need a list of those devices, i need some unique id for each device found and i need an indicator, how "good" the signal is received (like the "level" in android.wifi.ScanResult)... How do i do that?

like image 617
xenonite Avatar asked Jul 03 '10 08:07

xenonite


People also ask

How do I scan for Bluetooth devices?

Using the BluetoothAdapter , you can find remote Bluetooth devices either through device discovery or by querying the list of paired devices. Make sure you have the appropriate Bluetooth permissions and set up your app for Bluetooth before attempting to find Bluetooth devices.

How do I scan for Bluetooth near me?

To find an active Bluetooth device, first make sure you have Bluetooth enabled on your smartphone. Next, download Wunderfind for your iPhone or Android device and launch the app. Immediately, you'll see a list of Bluetooth devices that your smartphone has detected using its built-in Bluetooth radio.

How do I get a list of Bluetooth devices on my Android phone?

By using BluetoothAdapter method getBondedDevices(), we can get the Bluetooth paired devices list. Following is the code snippet to get all paired devices with name and MAC address of each device.

Why Android Cannot detect Bluetooth device?

If your Bluetooth devices won't connect, it's likely because the devices are out of range, or aren't in pairing mode. If you're having persistent Bluetooth connection problems, try resetting your devices, or having your phone or tablet "forget" the connection.


3 Answers

Check out code below :

Starting search

mBluetoothAdapter.startDiscovery();  mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) {     String action = intent.getAction();      //Finding devices                      if (BluetoothDevice.ACTION_FOUND.equals(action))      {         // Get the BluetoothDevice object from the Intent         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);         // Add the name and address to an array adapter to show in a ListView        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());     }   } };  IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);  registerReceiver(mReceiver, filter); 
like image 51
Deepthi Avatar answered Sep 29 '22 08:09

Deepthi


Call method bluetoothScanning, context is required

void bluetoothScanning(){      IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);     context.registerReceiver(mReceiver, filter);     final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();     mBluetoothAdapter.startDiscovery();  }   // Create a BroadcastReceiver for ACTION_FOUND. private final BroadcastReceiver mReceiver = new BroadcastReceiver() {     public void onReceive(Context context, Intent intent) {         String action = intent.getAction();         if (BluetoothDevice.ACTION_FOUND.equals(action)) {             // Discovery has found a device. Get the BluetoothDevice             // object and its info from the Intent.             BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);             String deviceName = device.getName();             String deviceHardwareAddress = device.getAddress(); // MAC address              Log.i("Device Name: " , "device " + deviceName);             Log.i("deviceHardwareAddress " , "hard"  + deviceHardwareAddress);         }     } }; 

Result

Name: LE-Bose Revolve+ SoundLink deviceHardwareAddress: MAC .....

like image 36
user3826696 Avatar answered Sep 29 '22 06:09

user3826696


This code uses BeaconManager, it continuously scans for new Bluetooth devices and returns a Beacons List object which you can use to get what ever information you need.

Make sure you import BeaconManager

private BeaconManager beaconManager;

//In onCreate method
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));

//use these out of the onCreate method
public void onScanStart(View view) {
        stopScanButton.setEnabled(true);
        scanningButton.setEnabled(false);
        beaconManager.bind(this);
}

@Override
public void onBeaconServiceConnect() {
    beaconManager.removeAllRangeNotifiers();
    beaconManager.addRangeNotifier(new RangeNotifier() {
    @Override
    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
    for (Beacon b : beacons) {
        System.out.println(String.format("%s: %f: %d", b.getBluetoothName(), b.getDistance(), b.getRssi()));
  });
    try {
//Tells the BeaconService to start looking for beacons that match the passed.
        beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
    } catch (RemoteException e) {
        Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
    }
}

Let me know if that works for you!

like image 27
Stelios Gabriel Avatar answered Sep 29 '22 07:09

Stelios Gabriel