Chcę słuchać połączenia/rozłączenia z wieloma konkretnymi urządzeniami bluetooth, których adresy MAC znam, ale które niekoniecznie są sparowane (nie chcę zepsuć listy sparowanych urządzeń użytkownika i na odwrót). Interesuje mnie tylko odkrywanie ich obecności, nie komunikowanie się z nimi.Jak rozpoznać * jakie * urządzenie Bluetooth powoduje transmisję ACTION_ACL_CONNECTED?
Działa to bardzo dobrze z mojego kodu poniżej! Ale moim problemem jest to, że nie mogę się dowiedzieć, które konkretne urządzenie łączy/rozłącza, tylko że zdarza się komuś z nich. Jak mogę się dowiedzieć, które działanie dotyczy?
Najpierw wystąpień obiektów dla moich dwóch konkretnych fizycznych urządzeń Bluetooth i dodać je do mojego zamiarem filtr:
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);
Potem słuchać do audycji o nich:
final BroadcastReceiver intentReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Teraz chcę znaleźć który został podłączony i/lub odłączony i nie widzę, jak mogę to zrobić.
Albo 1) Używam "BluetoothDevice" bezpośrednio. Reaguje na transmisję w porządku, ale nie mówi mi, które z dwóch fizycznych urządzeń dotyczy. Czy jest to sposób na odkrycie? Funkcja Bluetooth.getName() nie jest dozwolona, ponieważ nie jest klasą statyczną.
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
}
lub 2) Słucham obu akcji dla obu urządzeń.
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 ");
Ale to rejestruje, że łączy się z myPinkHeadset nawet jeśli jest myPvBluetoothDongle aktywować fizycznie. Zawsze odnosi się do tego, który pojawia się jako pierwszy z testów if. Dba tylko o samą akcję, a nie o przedmiot, którego dotyczy.
Zauważyłem, że EXTRA_DEVICE jest "Używane jako dodatkowe pole BluetoothDevice w każdym celu emisji przez tę klasę." Ale to tylko zwraca null do mnie:
String extra = intent.getStringExtra(BluetoothDevice.EXTRA_DEVICE);
zrobił ten sam błąd z paragonem, String jest mylące – NikkyD