2013-12-09 11 views
6

Ich habe meinen eigenen kleinen BLE Scan-Service geschrieben, der alle 3-5 Sekunden über einen Alarm ausgelöst wird. Es scannt für 1,1 Sekunden, um die Beacons um ihn herum zu bekommen und wandelt dann das RSSI-Signal in eine raue Nähe um.iBeacon Hintergrund Scannen

Ich überlege mir jetzt den Android iBeacon Dienst von Radius Networks, aber ich frage mich, wie ich das gleiche Hintergrund-Scannen realisieren könnte.

Beispiel: Ich möchte die Beacons scannign starten und im Hintergrund laufen und erhalten Intents in einem Broadcast-Empfänger, um zu entscheiden, was ich mit den Beacons gescannt habe.

Gibt es einige Beispiele und gibt es eine Schätzung, wie viel Batterie verbraucht wird?

Antwort

8

Radius Networks 'Android iBeacon Library macht genau das. Alles, was Sie tun müssen, um es im Hintergrund auszuführen, ist, die IBeaconManager an etwas mit einem langen Lebenszyklus zu binden. Dies kann ein benutzerdefiniertes android.app.Application Objekt oder ein eigener Dienst sein. Da Sie bereits einen eigenen Dienst für Ihre App geschrieben haben, können Sie problemlos die IBeaconManager an diesen Dienst binden, und sie bleibt im Hintergrund aktiv, solange der Dienst ausgeführt wird. Sie können Ihren Dienst auch verwenden, um Broadcast Intents zu senden, wenn Sie möchten, aber für die meisten Anwendungsfälle ist dies wahrscheinlich nicht notwendig.

Wie in der Batterie verwendet, hat die Bibliothek reference application ein Beispiel, wie man den Hintergrundmodus auf der Bibliothek einstellt, so dass Scans seltener passieren, was Batterie spart. Der zugehörige Code in dieser Referenz App ist hier:

@Override 
    protected void onPause() { 
      super.onPause(); 
      if (iBeaconManager.isBound(this)) iBeaconManager.setBackgroundMode(this, true);      
    } 
    @Override 
    protected void onResume() { 
      super.onResume(); 
      if (iBeaconManager.isBound(this)) iBeaconManager.setBackgroundMode(this, false);      
    } 

den Hintergrund-Modus auf true festlegen, wird die Bluetooth-Scans nur einmal sehr 5 Minuten geschehen - etwas Ähnliches, was iOS tut. Basierend auf Tests auf einem Nexus 4, reduziert dies den gesamten Batterieverbrauch des Telefons von 95mA auf 55mA (beide Zahlen enthalten den gesamten Betriebssystem-Drain.)

Full Disclosure: Ich arbeite für Radius Networks und bin der primäre Autor von die Android iBeaconLibrary.

+0

Hallo David, vielen Dank für Ihre Kommentare. Für meine spezielle Demo bin ich jetzt mit dem Service & dem Alarm gegangen, aber ich würde ansonsten komplett mit deiner API gehen. –

+0

Ich fand die IBeacon-Klasse und die scanFromRecord-Methode sehr sehr hilfreich. Die einzige Sache, die ich nicht verstehen kann, ist, was Zeile 216 gerade macht. Anscheinend wird ein beeke-Signal erkannt, aber dann würde es fast eine "leere" IBeacon-Klasse zurückgeben. Ist das Legacy-Code? Ich habe gerade iBeacons von estimote erhalten und es funktioniert. Übrigens würde ich gerne in Kontakt treten und auch Ihre Unternehmen mit Beacons und Services beauftragen. Wie können wir direkt verbinden? –

+0

Verstanden von Ihrer Demo. Dies ist ein Open-Source-Projekt, deshalb bin ich immer auf der Suche nach Input und Mitarbeitern. Vielleicht können wir – davidgyoung