Erkennung von Bluetooth-Geräten (headsets, Handys etc) in der Nähe, ohne dass die Geräte in den sichtbar-Modus
Mein Ziel:
Erkennen alle in der Nähe bluetooth-Geräte(Telefone, headsets, etc.) von meinem Android-Anwendung.
Ist hier ein nettes Beispiel aus developer.android.com entdeckt, die die bluetooth-Geräte in der Nähe zusammen mit der Liste der bereits gekoppelten Geräte.
Meine situation:
Hatte ich zwei bluetooth headsets eingeschaltet und Sie wurden nicht erkannt wird nach einer erfolgreichen bluetooth-scan! So ich Grabe das problem, und irgendwo gefunden, dass das bluetooth-headset muss ausgeschaltet werden, um den pairing-Modus, wenn erkannt von android.
Zum Umschalten des headsets in den pairing-Modus, ich musste lange drücken Sie die power-Taste, während Sie drehen Sie auf. Und ja, endlich, die bluetooth-headsets werden jetzt erkannt, durch den scan von meiner Anwendung.
Mein problem:
Möchte ich meine headsets werden automatisch erkannt, ohne wechseln Sie in den pairing-Modus. Konnte nicht einen Weg finden, erkennen alle in der Nähe bluetooth-Geräte, die eingeschaltet sind.
Nicht unbedingt, ich habe das Pairing mit dem bluetooth-Gerät. Ich brauche nur, um Sie zu entdecken alle. Wenn mein bluetooth-headset eingeschaltet ist, ich denke, das ist bereits erkennbar. Mein android kann es nicht erkennen, bis ich Kraft, um den pairing-Modus. Das ist mein problem tatsächlich. Ich möchte entdecken Sie alle, ohne Sie zu zwingen in den pairing-Modus.
Was rufen Sie den "pairing-Modus" ist eher erkennbar und pairable-Modus zusammen. Das ist, wie die meisten Geräte arbeiten. Das heißt, es ist nicht sichtbar, nur durch einschalten des Geräts.
InformationsquelleAutor Reaz Murshed | 2016-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, hier ist alles, was ich fand nach dem Lesen blogs, threads, Dokumentationen, SO Antworten etc. über den Android-bluetooth-Erkennung. Dachte, das könnte nützlich sein, um post meine Erkenntnisse hier.
So, bevor jemand anfängt zu Lesen, möchte ich klarstellen, dass, konnte ich nicht finden, eine Möglichkeit zum erkennen eines bluetooth-Geräts in der Nähe, die eingeschaltet ist, aber nicht erkennbar ist.
Erkennen alle in der Nähe Bluetooth-Geräte
Mein primäres Ziel ist es, zu erkennen, alle in der Nähe befindlichen bluetooth-Geräten. Dazu haben wir eine
BluetoothAdapter
Klasse in Android, die einestartDiscovery
Funktion zum Scannen nach bluetooth-Geräten in der Nähe. Damit dies nicht dient meinem Zweck, wie die bluetooth-Geräte müssen erkennbar sein, um erkannt zu werden, indem Sie eine bluetooth-Suche von Android. Was ich will, ist zu erkennen, alle Bluetooth-Geräte in der Nähe, ohne dass Sie erkannt werden. Ich begann die Suche nach einer Lösung, um dieses Ziel zu erreichen.Begann ich mit dem Studium Bluetooth-Protokolle und fand die zugrunde liegenden Protokolle, die für bluetooth-Erkennung, Verbindung und Paarung. Für Android, fand ich keine API zu entdecken/detect BT-Geräte, die eingeschaltet sind, aber nicht in den sichtbar-Modus.
Bluetooth-Geräte mit der Klasse 0x00 ignoriert
Graben in dieses problem mit der Erkennung, ohne dass die bluetooth-Geräte sichtbar-Modus führen uns zu einem Punkt, wo wir uns gefundenen Bluetooth-Gerät, das sich wirbt als
class 0×00
ignoriert wird automatisch während der Ausführung von scan nach BT-Geräten in der Nähe. Dieses problem ergibt sich aus mehreren stellen. Hier habe ich einige.Habe ich versucht, eine Arbeit zu finden, um dieses problem und ja, ich habe eines gefunden, obwohl Sie in der Dokumentation und Bewertungen zusammen mit diesem work-around sagt, es funktioniert nicht für alle Arten von Android-Geräten. Trotzdem, die Alternative Suche ist die gleiche wie die Standard-BT-scan, aber es hat einige zusätzliche arbeiten. Es liest die Android-log nach einer erfolgreichen BT-scan und überprüfen Sie, ob es irgendein BT-Gerät übersprungen wird durch den Betrieb. Dies ist ein einfaches hack beschrieben hier . Es gibt eine google group diskutiert über die gleichen arbeiten, um hier.
Den work-around, oben nicht lösen, mein problem. Bluetooth-headsets müssen erkennbar sein, für die erkannt wird, indem ein BT scan. Sie sind nicht übersprungen, während Android ist das Scannen der in der Nähe von BT-Geräten. Sie werden einfach nicht gefunden.
Bluetooth-Seite Scan -
Allerdings begann ich die Suche nach einer Lösung wieder und findet etwas wieder interessant! Dies ist aus einem anderen Stackoverflow-Antwort, die sagt, ist Es möglich zu wissen, ob ein bluetooth-Gerät um, auch wenn er in einem undiscoverable-Modus, durch das wissen, seine komplette MAC-Adresse in den ersten Platz. Ich zitiere wieder aus seiner Antwort für die Zukunft,
Fand ich Hoffnung und begann mit der Suche nach, wie können wir initiieren eine Seite Scannen, die in Android, scheiterte aber auch diesmal. Konnte Sie nicht finden jede Art von APIs zu initiieren, die Seite zu Scannen. Von der Android-Dokumentation von
BluetoothAdapter
Klasse, ich kam zu wissen, dass, wenn ein BT scan startet,Es ist ein Indiz für Seite Scannen in der Android-Dokumentation, aber überraschend, es gibt keine andere Dokumentation für Seite Scannen-überall. Ich habe eine Stackoverflow-Frage für Ihre Anfrage.
Können wir "Narren" android, indem eine Liste von BTIDs "bereits gekoppelten" Liste?
Nein, ich fand keine Möglichkeit, dies zu tun. Ich habe gelesen, dass man Android die bluetooth-Kopplung funktioniert. Hier ist ein schönen Fluss-Diagramm, zusammen mit einer detaillierten Handbuch Lesen. Wir haben versucht, Android versteckte APIs und könnte einige versteckte APIs mit der Spiegelung. Dann begannen wir mit der Suche nach versteckten APIs, die wir verwenden könnten, um zu dienen meinem Zweck. Aber, leider, wir konnte nicht finden, versteckte APIs zum hinzufügen einer BT-Gerät in Android ist bereits gekoppelten Liste programmgesteuert.
Hier sind einige hilfreiche links, um zu überprüfen für die bluetooth-Kopplung, die versteckte APIs und wie Sie aufgerufen werden über reflektion für zukünftige Referenz.
So, ich könnte paar ein BT-Gerät wenn es in den sichtbar-Modus und war nicht in der Zuordnungsliste in Android. In meinem Fall habe ich ein bluetooth-headset. Es war eingeschaltet und in den Modus "erkennbar". Die BT-Adresse (MAC-Adresse) des Headsets bekannt war. Also rief ich die Funktion
createBond
aus meinem code mit der spiegelung und es funktionierte perfekt. Das Gerät Hinzugefügt wurde, in der "schon-gepaart" Liste der Android-erfolgreich. Beim roaming um nach Lösungen zu dienen, meine Aufgabe fand ich etwas Interessantes...Interessante Beobachtung über die bereits gekoppelten Geräte
Fand ich, dass android behält ein zuvor gekoppeltes Gerät in seiner Erinnerung, auch wenn ich zu entfernen es von der bereits gekoppelten Liste. Lassen Sie uns gemeinsam eine Fallstudie sowie die Ergebnisse, die hier für ein besseres Verständnis. In meinem Fall mit dem headset verbunden war zuvor.
Hier ist das Protokoll, das gedruckt zusammen mit der MAC-Adresse des Headsets, die wir zusammen vor und dann ungepaarten.
Dann wieder, ich lief den gleichen test, aber dieses mal wandten wir uns dem bluetooth-headset (nicht auffindbar). Das headset wurde nicht gefunden in diesem Fall auch, aber das interessante an der Sache ist, dieses mal ein anderes Protokoll gedruckt wurde.
Den
REASON
geändert, und daher kann ich verstehen, Android versucht, die Verbindung mit dem bluetooth-headset. Das headset war nicht in den sichtbar-Modus, noch Android finden konnte und versuchte mit Ihr zu verbinden, wie es war in der gekoppelten Liste vor.Dieses Protokoll gedruckt werden, während ein bluetooth-scan laufen mit hinzufügen
ACTION_BOND_STATE_CHANGED
Aktion mitintent.addAction
.Können Android verwendet werden als beacon?
Ja, aber in diesem Fall Android Werbung machen muss, sich als MANN zu. Dies ist, was neu in Android und nicht alle Geräte unterstützen diese Funktion bis jetzt. Hier ist ein Liste der Geräte die Unterstützung von Bluetooth LE Anzeige-Fähigkeit. Aber, wie Bluetooth LE-Werbung hat einen sehr niedrigen Stromverbrauch bei gleichzeitig hoher Leistung, ich denke, das wird das nächste große Ding in Android.
Hier sind einige hilfreiche links für die zukünftige Forschung.
Hilfreiche Funktionen und Bibliotheken für bluetooth-Vorgänge
InformationsquelleAutor Reaz Murshed