Beacon-Nachrichten abrufen

Ihre App kann Bluetooth Low Energy (BLE)-Beacon-Anhänge abonnieren. mit demselben Mechanismus, wie beim Abonnieren von Nachrichten, andere Geräte in der Nähe. 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, wie Ihre App BLE-Beacon-Nachrichten abonnieren kann:

  • Im Vordergrund als Reaktion auf eine Nutzeraktion oder einem Ereignis.
  • Im Hintergrund, wenn deine App nicht ausgeführt wird.

Im Vordergrund abonnieren

Wenn Ihre App Beacon-Nachrichten im Vordergrund abonniert, werden Scans bis die App das Abo beendet. Nur Vordergrund starten , wenn Ihre App aktiv ist. Dies geschieht in der Regel als Reaktion auf eine Nutzeraktion.

Deine App kann ein Abo im Vordergrund initiieren, indem sie Folgendes aufruft: Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) und Festlegen der Option Strategy auf BLE_ONLY.

Das folgende Code-Snippet zeigt, wie ein Abo im Vordergrund initiiert 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 keine Benachrichtigungen mehr erhalten durch einen Anruf Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

Inhalte im Hintergrund abonnieren

Wenn Ihre App im Hintergrund Beacon-Nachrichten abonniert, werden Scans mit geringem Energieverbrauch werden bei Bildschirm-on-Ereignissen ausgelöst, auch wenn Ihre App derzeit nicht aktiv ist. Du kannst diese Scan-Benachrichtigungen zum „Aufwachen“ verwenden Ihre App als Reaktion auf eine Nachricht zu senden. Abos im Hintergrund verbrauchen weniger Strom als Abos im Vordergrund, haben aber eine höhere Latenz und eine geringere Zuverlässigkeit.

Deine App kann ein Hintergrundabo initiieren, indem sie Folgendes aufruft: Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) und Festlegen der Option Strategy auf BLE_ONLY.

Das folgende Code-Snippet zeigt das Initiieren eines Hintergrundabos durch Anrufen Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)

// 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.

@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 keine Benachrichtigungen mehr erhalten durch einen Anruf Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

Beacon-Nachrichten parsen

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

  • Namespace: Eine Namespace-ID.
  • Type: Der Datentyp.
  • Daten: Der Datenwert für den Anhang.

Im folgenden Code-Snippet wird die Verwendung eines Nachrichten-Listeners zum Parsen dargestellt. von einem BLE-Beacon empfangene Nachrichten:

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 Bytes ab. In diesem Beispiel wird vorausgesetzt, dass die Contentbytes einen UTF-8-String codieren. Ihre Beacon-Nachricht kann jedoch andere Byteformate zu codieren (z. B. einen serialisierten Protokollpuffer). Weitere Informationen finden Sie unter Anhänge zu Beacons hinzufügen.

Um herauszufinden, welche Namespaces Ihrem Projekt zugeordnet sind, rufen Sie namespaces.list

Hinweise: