2013-07-23 3 views
10

Ich bin kein Bluetooth-Spezialist und frage mich, welche Möglichkeiten es gibt, bereits gepaarte Bluetooth-Geräte automatisch zu finden, wenn sie sich voneinander unterscheiden.Finden Sie bereits gepaarte Bluetooth-Geräte automatisch, wenn sie in Reichweite sind.

Hintergrund: In unserem Fall muss eine Android-Anwendung über Bluetooth (Rfcomm) mit einem speziellen Zubehör verbunden werden. Beide Geräte sind einander bekannt (sie sind gepaart). Die Android-Anwendung registriert einen Broadcast-Empfänger. Während des Starts der Anwendung initiiert die App eine Erkennung, um das zugehörige Zubehör zu finden. Wenn das Zubehör in Reichweite ist, funktioniert alles super.

Problem: Der Benutzer startet die Anwendung außerhalb der Reichweite des entsprechenden Zubehörs. Die Android-Anwendung versucht, das Zubehör ohne Erfolg zu erkennen. Dann geht der Benutzer in den Bereich des Bluetooth-Zubehörs. Der Rundfunkempfänger wird nicht über das Zubehör benachrichtigt, das sich jetzt in Reichweite befindet.

ähnliche Thema/Mögliche Lösungen ähnliche Fragen wurden bereits auf Stackoverflow Fragen (z autoconnect to bluetooth device when in range). Aber ständig zu versuchen, Bluetooth-Geräte in Reichweite zu finden, ist nicht das, was ich suche, weil dies zu viel Batterieverbrauch des Android-Geräts verursachen würde.

Eine andere Lösung wäre, in der onResume-Methode der Aktivität eine Verbindung zum gekoppelten Gerät herzustellen. Dies würde funktionieren, hat aber den Nachteil, dass die Anwendung nicht im Hintergrund ausgeführt werden kann. Daher musste der Benutzer die Anwendung mindestens einmal in den Vordergrund bringen, um die Verbindung herzustellen.

Eine dritte Idee, über die ich nachgedacht habe, ist es, einen Server-Socket in die Android-Anwendung zu implementieren. Wenn die Android-Anwendung gestartet wird und die Erkennung ohne Erfolg beendet wurde, konnte die Android-Anwendung den Server-Socket erstellen und eingehende Benachrichtigungen des Zubehörs abhören. Dies würde in einigen Szenarien helfen (z. B. startet der Benutzer seine Anwendung, nähert sich dem Zubehör, aktiviert das Zubehör und das Zubehörteil benachrichtigt die Anwendung beim Start, dass sie sich jetzt in Reichweite befindet). Aber das ist immer noch keine 100% Lösung, da beide Geräte außerhalb der Reichweite voneinander starten können. Außerdem wäre es notwendig zusätzliche Funktionalität zu implementieren (Bluetooth Server Socket im Android Gerät ...).

Ich frage mich also, ob bessere Lösungen existieren. Ich suche nach einer Lösung, wo keine zusätzlichen ServerSockets erforderlich sind, und ich bekomme immer die Benachrichtigung, dass die zwei bereits gepaarten Geräte in Reichweite voneinander sind :-)

Vielen Dank für jede Hilfe!

+0

Ich würde mit Ihrer 2. Lösung gehen, in dem Telefon versucht, das Zubehör ohne Suche nach dem gleichen zu verbinden, nehmen Sie das Beispiel von Telefon und Headset, wenn verbunden und 1 erlischt Normalerweise versuchen Headsets, sich für eine bestimmte Zeit an zuvor gekoppelte Geräte zu verbinden (abhängig von der Headset-Implementierung). – ashish

+0

Hey! Danke für deine Antwort. Der Nachteil der zweiten Lösung besteht darin, dass dies irgendwie ausgelöst werden muss (z. B. onResume). Bei onResume muss der Nutzer die App in den Vordergrund bringen. Ich suche nach einer Möglichkeit, es automatisch zur richtigen Zeit zu tun, um es für den Benutzer einfach zu machen :-) – mheymel

+0

Ist es nicht möglich, einen Dienst im Hintergrund zu haben, der sich um Bluetooth-Gerät kümmern wird, verbinden/suchen – ashish

Antwort

0

Keine vollständige Lösung, aber es reicht vielleicht aus, dass Ihre App die Anwesenheit des Zubehörs abfragt, wenn der Bildschirm eingeschaltet wird? In diesem Fall kann dies hilfreich sein: Start Activity on wake up/sleep in Android

+0

Hey. Danke für deine Antwort! Dies ist auch eine gute Lösung (besser als die "onResume" -Lösung). Aber du hast Recht, immer noch nicht die 100% ige Lösung. Nach einem Blick auf ACL und die Low-Level-Nachrichten scheint es der beste Weg zu sein, Lösung 3 zu verwenden - da wir den Komfort eines speziellen Zubehörs haben. [link] (http://stackoverflow.com/questions/9537833/what-triggers-the-bluetoothdevice-action-acl-roadcasts) – mheymel

Verwandte Themen