Я хочу прослушивать соединение / разъединение с рядом определенных устройств Bluetooth, MAC-адреса которых я знаю, но которые не обязательно сопряжены (я не хочу связываться со списком сопряженных устройств пользователя и наоборот). Меня интересует только обнаружение их присутствия, а не общение с ними.
Это очень хорошо работает с моим кодом ниже! Но моя проблема в том, что я не могу узнать, какое конкретное устройство подключается / отключается, только что это происходит с кем-то из них. Как я могу узнать, к какому из действий относится действие?
Сначала я создаю экземпляры объектов для двух своих конкретных физических устройств 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, даже если это myPvBluetoothDongle, который я активирую физически. Это всегда относится к тому, который идет первым из тестов if. Он заботится только о самом действии, а не о том, к какому объекту он относится.
Я видел, что EXTRA_DEVICE «используется как дополнительное поле Parcelable BluetoothDevice в каждом намерении, передаваемом этим классом». Но он возвращает мне только ноль:
String extra = intent.getStringExtra(BluetoothDevice.EXTRA_DEVICE);