aakbari1024
aakbari1024

Reputation: 167

My android app is detecting the same bluetooth device multiple times

I'm using code from the Android developer website to detect Bluetooth devices in range, and adding them to an ArrayAdapter. Problem is, each device gets added to the ArrayAdapter 5-6 times. Right now, I'm just using the code from here: http://developer.android.com/guide/topics/connectivity/bluetooth.html#DiscoveringDevices

Here's what I have:

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();      
mBluetoothAdapter.startDiscovery();

final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        // When discovery finds a device
        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());
        }
    }
};

Any idea what's causing this? And what can I do to get a device to be added only once to the ArrayAdapter, instead of 5 times?

Upvotes: 6

Views: 3194

Answers (1)

waqaslam
waqaslam

Reputation: 68177

I'm not sure if its a bug or what but I've also experienced this on some of my devices. To solve this, add found devices in a List only once with some checks. See below:

private List<BluetoothDevice> tmpBtChecker = new ArrayList<BluetoothDevice>();

    final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            // When discovery starts    
            if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
                //clearing any existing list data
                tmpBtChecker.clear();
            }

            // When discovery finds a device
            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
                if(!tmpBtChecker.contains(device)){
                   tmpBtChecker.add(device);
                   mArrayAdapter.add(device.getName()+"\n"+device.getAddress());
                }
            }
        }
    };

Upvotes: 6

Related Questions