я хочу прослушивать подключение/отключение с рядом конкретных 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);