Beacon-Nachrichten abrufen

Ihre App kann BLE-Beacon-Anhänge (Bluetooth Low Energy) mit demselben Mechanismus abonnieren, der auch zum Abonnieren von Nachrichten verwendet wird, die von anderen Geräten in der Nähe veröffentlicht wurden. Wenn du ein Abo abschließt, erhält deine App automatisch Nachrichten von Beacons und Geräten in der Nähe.

BLE-Beacon-Mitteilungen abonnieren

Es gibt zwei Möglichkeiten, BLE-Beacon-Nachrichten zu abonnieren:

  • Im Vordergrund als Reaktion auf eine Nutzeraktion oder ein Ereignis.
  • Im Hintergrund, wenn Ihre Anwendung nicht ausgeführt wird.

Im Vordergrund abonnieren

Wenn deine App Beacon-Nachrichten im Vordergrund abonniert, werden Scans kontinuierlich durchgeführt, bis deine App abbestellt wird. Starten Sie ein Vordergrund-Abo nur, wenn Ihre App aktiv ist, in der Regel als Reaktion auf eine Nutzeraktion.

Ihre App kann ein Vordergrund-Abo initiieren, indem sie Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) aufruft und die Option Strategy auf BLE_ONLY setzt.

Das folgende Code-Snippet zeigt, wie ein Abo im Vordergrund gestartet wird Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mMessageListener = new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.d(TAG, "Found message: " + new String(message.getContent()));
        }

        @Override
        public void onLost(Message message) {
            Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
        }
    }
}

// Subscribe to receive messages.
private void subscribe() {
    Log.i(TAG, "Subscribing.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

Wenn das Abo nicht mehr erforderlich ist, sollte Ihre App durch Aufrufen von Nearby.getMessagesClient(Activity).unsubscribe(MessageListener) beendet werden.

Im Hintergrund abonnieren

Wenn Ihre App Beacon-Nachrichten im Hintergrund abonniert, werden bei Bildschirmwarnhinweisen Scans mit geringem Energieverbrauch ausgelöst, auch wenn Ihre App derzeit nicht aktiv ist. Sie können diese Scanbenachrichtigungen verwenden, um Ihre App als Reaktion auf eine bestimmte Nachricht zu aktivieren. Hintergrundabos verbrauchen weniger Energie als Vordergrundabos, haben aber eine höhere Latenz und sind weniger zuverlässig.

Ihre App kann ein Hintergrundabo initiieren, indem sie Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) aufruft und die Option Strategy auf BLE_ONLY setzt.

Das folgende Code-Snippet zeigt, wie durch Aufrufen von Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) ein Hintergrundabo initiiert wird.

// Subscribe to messages in the background.
private void backgroundSubscribe() {
    Log.i(TAG, "Subscribing for background updates.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options);
}

private PendingIntent getPendingIntent() {
    return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
}

Das folgende Code-Snippet zeigt, wie der Intent in der Klasse BeaconMessageReceiver verarbeitet wird.

@Override
public void onReceive(Context context, Intent intent) {
    Nearby.getMessagesClient(context).handleIntent(intent, new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.i(TAG, "Found message via PendingIntent: " + message);
        }

        @Override
        public void onLost(Message message) {
            Log.i(TAG, "Lost message via PendingIntent: " + message);
        }
    });
}

Wenn das Abo nicht mehr erforderlich ist, sollte Ihre App durch Aufrufen von Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent) beendet werden.

Beacon-Nachrichten parsen

Beacon-Anhänge sind Blobs mit beliebigen Daten, die Sie zu Beacons hinzufügen können. Jeder Anhang besteht aus folgenden Teilen:

  • Namespace: eine Namespace-ID
  • Typ: Der Datentyp.
  • Daten: Der Datenwert für den Anhang.

Das folgende Code-Snippet zeigt, wie ein Nachrichten-Listener zum Parsen von Nachrichten verwendet wird, die von einem BLE-Beacon empfangen wurden:

mMessageListener = new MessageListener() {
    @Override
    public void onFound(Message message) {
        // Do something with the message here.
        Log.i(TAG, "Message found: " + message);
        Log.i(TAG, "Message string: " + new String(message.getContent()));
        Log.i(TAG, "Message namespaced type: " + message.getNamespace() +
                "/" + message.getType());
    }

    ...
};

Das Parsen des Inhalts hängt vom Format der Byte ab. In diesem Beispiel wird davon ausgegangen, dass die Inhaltsbyte einen UTF-8-String codieren. Die Beacon-Nachricht kann jedoch andere Byteformate codieren, z. B. einen serialisierten Protokollpuffer. Weitere Informationen finden Sie unter Anhänge zu Beacons hinzufügen.

Rufen Sie namespaces.list auf, um herauszufinden, welche Namespaces Ihrem Projekt zugeordnet sind.

Hinweise: