Как определить *какое* устройство Bluetooth вызывает широковещательную рассылку ACTION_ACL_CONNECTED?

я хочу прослушивать подключение/отключение с рядом конкретных bluetooth-устройств, MAC-адреса которых мне известны, но которые не обязательно являются сопряженными (не хочу возиться со списком сопряженных устройств пользователя и наоборот), меня интересует только их обнаружение присутствия, не общаясь с ними.

Это очень хорошо работает с моим кодом ниже! Но моя проблема в том, что я не могу узнать w какое конкретное устройство подключается/отключается, только это происходит с кем-то из них.Как я могу узнать, к какому из них относится действие?

Сначала я создаю экземпляры объектов для двух моих конкретных физических Bluetooth-устройств и добавляю их в свой фильтр намерений:

    BluetoothDevice myPinkHeadset = mBluetoothAdapter.getRemoteDevice("18:17:0C:EB:9C:81");
    BluetoothDevice myPcBluetoothDongle = mBluetoothAdapter.getRemoteDevice("5A:7A:CC:4B:C5:08");

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(myPinkHeadset.ACTION_ACL_CONNECTED);
    intentFilter.addAction(myPinkHeadset.ACTION_ACL_DISCONNECTED);
    intentFilter.addAction(myPcBluetoothDongle.ACTION_ACL_CONNECTED);
    intentFilter.addAction(myPcBluetoothDongle.ACTION_ACL_DISCONNECTED);

Затем я слушаю трансляции о них:

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

Теперь я хочу чтобы узнать, какой из них был подключен и / или отключен, и я не понимаю, как я могу это сделать.

Либо 1) Я использую "BluetoothDevice" напрямую. Он нормально реагирует на трансляцию, но не говорит мне, к какому из двух физических устройств относится действие. Это их способ узнать? Bluetooth.getName() не разрешен, потому что это не статический класс.

if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { 
        } 

или 2) Я слушаю оба действия для обоих устройств.

        if (myPinkHeadset .ACTION_ACL_CONNECTED.equals(action)) {
            Log.v(TAG, "Connected to myPinkHeadset ");
        }
        else if (myPinkHeadset .ACTION_ACL_DISCONNECTED.equals(action)) {
            Log.v(TAG, "Disconnected from myPinkHeadset ");
        }
        else if (myPcBluetoothDongle .ACTION_ACL_CONNECTED.equals(action)) { 
            Log.v(TAG, "Connected to myPcBluetoothDongle ");
        }
        else if (myPcBluetoothDongle .ACTION_ACL_DISCONNECTED.equals(action)) {
            Log.v(TAG, "Disconnected from myPcBluetoothDongle ");

Но затем он записывает, что подключается к myPinkHeadset, даже если это мой PvBluetoothDongle, который я активировал физически. Это всегда идет для того, который идет первым из тестов if. Он заботится только о самом действии, а не о том, к какому объекту оно относится.

Я видел, что EXTRA_DEVICE «используется как дополнительное поле Parcelable BluetoothDevice в каждом намерении, транслируемом этим классом». Но он возвращает мне только ноль:

String extra = intent.getStringExtra(BluetoothDevice.EXTRA_DEVICE);
8
задан Tombola 27 February 2012 в 03:40
поделиться