2015-10-20 11 views
6

Ich benutze Googles Nearby API, um Beacons (Eddystone) zu erkennen. Der einzige aktuelle Ansatz scheint im Moment Nearby.Messages.subscribe() zu sein, wie beschrieben here.In der Nähe der API, wie scannen Sie Beacons im Hintergrund?

Das Problem ist, dass dies für das kontinuierliche Scannen im Hintergrund nicht geeignet scheint. Meine App muss Beacons im Hintergrund überwachen, sodass, wenn eins sichtbar wird, ein Aufruf an eine REST-API erfolgt. Grundsätzlich würde ich etwas ähnliches wie die beacon monitorning Funktion benötigen, die vom Estimote SDK zur Verfügung gestellt wird.

Wäre dies mit der API in der Nähe möglich, ohne die Batterie zu entladen?

Antwort

0

Es scheint, als ob die einzige Möglichkeit besteht, entweder kontinuierlich zu scannen oder Geräte- und Beacon-Position zu verwenden, um einen Scan auszulösen, wenn sie sich in der Nähe befinden. In beiden Fällen ist der Batterieverbrauch beeinträchtigt, da Sie entweder den Standort scannen oder teilen. Es sieht so aus, als ob die Beacons von Estimote den Standortansatz verwenden, was wahrscheinlich der bessere Ansatz ist, um Batterie zu sparen.

2

Ich weiß, diese Frage bezieht sich auf die Verwendung der Nearby-API, aber ich weiß nicht, wie ich sie verwenden kann, um Ihre Anforderungen zu erfüllen.

Wenn Sie für Alternativen offen sind, hat die freie und Open Source Android Beacon Library volle Unterstützung für Eddystone Beacons. Seine API ist nach den iOS-Überwachungs/Entfernungs-Beacon-APIs modelliert, so dass es genau das tut, was Sie wollen.

See here für die Verwendung dieser Bibliothek zur Überwachung von Eddystone Beacons.

0

Sie können auch im Hintergrund abonnieren, um Intent anstelle von MessageListener-Benachrichtigungen zu erhalten. Bei der Hintergrundabtastung handelt es sich um eine stromsparende Abtastung, so dass die Latenzzeit sehr lang sein kann (sogar Minuten, um ein Beacon zu erkennen). Der Scan wird beim Screen-On-Ereignis durchgeführt oder wenn andere Apps dies anfordern. So erhalten Sie Ergebnisse von anderen Apps Scans.

Sie können GoogleApiClient mithilfe des Anwendungskontexts anstelle des Aktivitätskontexts erstellen. B. von einem Rundfunkempfänger, der auf BOOT_COMPLETED-Sendung reagiert.

GoogleApiClient client = new GoogleApiClient.Builder(appContext) 
    .addApi(Nearby.MESSAGES_API, new MessagesOptions.Builder() 
     .setPermissions(NearbyPermissions.BLE) 
     .build()) 
    .build(); 
client.connect(); 

Sobald der Client (die onConnected Methode der Connection) verbunden ist, können Sie subscribe PendingIntent mit und Rundfunkempfänger erstellen, die die Absicht behandelt.

Im Broadcast-Empfänger können Sie Intents mit der Nearby.Messages.handleIntent-Methode verarbeiten, die denselben MessageListener wie das Scannen im Vordergrund verwendet.

Eines der Probleme mit diesem Ansatz sind Zugriffsberechtigungen für Nearby. Damit der Benutzer den Zugriff auf Nearby freigeben kann, benötigen Sie die Benutzeroberfläche. Meine Lösung war, mit dem Hintergrundscan zu warten, bis der Benutzer die App das erste Mal öffnet und die Berechtigungen akzeptiert. Einmal akzeptiert, können Sie im Hintergrund abonnieren.