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.