Wie identifiziert * das * Bluetooth-Gerät eine ACTION_ACL_CONNECTED-Sendung?

8

Ich möchte auf die Verbindung / Trennung mit einer Reihe spezifischer Bluetooth-Geräte hören, deren MAC-Adressen ich kenne, die aber nicht unbedingt gepaart sind (ich möchte mich nicht mit der Liste der gepaarten Geräte des Benutzers herumschlagen und umgekehrt). Ich bin nur daran interessiert, ihre Anwesenheit zu entdecken, nicht mit ihnen zu kommunizieren.

Das funktioniert sehr gut mit meinem Code unten! Aber mein Problem ist, dass ich nicht herausfinden kann, welches bestimmte Gerät sich verbindet / trennt, nur dass es jemandem passiert. Wie kann ich herausfinden, um welche Handlung es sich handelt?

Zuerst instanziere ich Objekte für meine zwei spezifischen physischen Bluetooth-Geräte und füge sie meinem Absichtsfilter hinzu:

%Vor%

Dann höre ich nach Sendungen über sie:

%Vor%

Nun möchte ich herausfinden, welche Verbindung und / oder Verbindung getrennt wurde, und ich sehe nicht, wie ich das tun kann.

Entweder 1) Ich verwende "BluetoothDevice" direkt. Es reagiert auf die Übertragung in Ordnung, aber es sagt mir nicht, auf welches der beiden physikalischen Geräte sich die Aktion bezieht. Ist das ein Weg, das herauszufinden? Bluetooth.getName () ist nicht zulässig, da es sich nicht um eine statische Klasse handelt.

%Vor%

oder 2) Ich höre beide Aktionen für beide Geräte.

%Vor%

Aber dann protokolliert es, dass es sich mit myPinkHeadset verbindet, auch wenn es myPvBluetoothDongle ist, das ich physisch aktiviere. Es gilt immer für den, der als erster von den if-Tests kommt. Es kümmert sich nur um die Aktion selbst, nicht darum, um welches Objekt es sich handelt.

Ich habe gesehen, dass EXTRA_DEVICE in jeder Intent-Sendung dieser Klasse als "Parzellierbares BluetoothDevice-Zusatzfeld" verwendet wird. Aber es gibt nur null für mich zurück:

%Vor%     
Tombola 27.02.2012, 03:27
quelle

2 Antworten

14

Damit ist das Gerät verbunden mit:

%Vor%

Als Neuling habe ich das parzellierbare Konzept missverstanden. EXTRA_DEVICE ist ein String, aber es ist nur ein Tag für das Objekt. Es ist also nicht notwendig, einzelne Instanzen von BluetoothDevice zu registrieren oder zu hören. Wenn eine Aktion gesendet wird, zeigt die Absicht an, welches physische Gerät sie verursacht hat. (Kann ich mir dafür +1 geben :-D)

    
Tombola 27.02.2012, 12:20
quelle
1
%Vor%

und

%Vor%

haben den gleichen Wert. Es ist ein statischer Wert. BluetoothDevice.ACTION_ACL_CONNECTED und BluetoothDeviceACTION_ACL_DISCONNECTED

%Vor%

};

Ich hoffe, das kann dir helfen

    
Anthone 27.07.2015 10:40
quelle