Obtenir les messages des balises

Votre application peut s'abonner aux pièces jointes de balises Bluetooth à basse consommation (BLE) à l'aide du même mécanisme que celui utilisé pour s'abonner aux messages publiés par d'autres appareils à proximité. Lorsque vous vous abonnez, votre application reçoit automatiquement des messages provenant des balises et des appareils à proximité.

S'abonner aux messages de la balise BLE

Votre application peut s'abonner aux messages de la balise BLE de deux façons:

  • Au premier plan, en réponse à une action de l'utilisateur ou un événement.
  • En arrière-plan, lorsque votre application est ne s'exécute pas.

S'abonner au premier plan

Lorsque votre application s'abonne à des messages de balise au premier plan, les analyses sont en continu jusqu'à ce que votre application soit désabonnée. Ne démarrer qu'un premier plan lorsque votre application est active, généralement en réponse à une action de l'utilisateur.

Votre application peut lancer un abonnement de premier plan en appelant Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) et en définissant l'option Strategy sur BLE_ONLY.

L'extrait de code suivant illustre le lancement d'un abonnement de premier plan 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);
}

Lorsque l'abonnement n'est plus nécessaire, votre application doit se désabonner en appelant Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

S'abonner en arrière-plan

Lorsque votre application s'abonne aux messages de balises en arrière-plan, les analyses à faible consommation d'énergie sont déclenchés lors d'événements à l'écran, même lorsque votre application n'est pas active. Vous pouvez utiliser ces notifications d'analyse pour vous réveiller votre application en réponse à une un message particulier. Les abonnements en arrière-plan consomment moins d'énergie abonnements au premier plan, mais avec une latence plus élevée et une fiabilité moindre.

Votre application peut initier un abonnement en arrière-plan en appelant Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) et en définissant l'option Strategy sur BLE_ONLY.

L'extrait de code suivant montre comment lancer un abonnement en arrière-plan en Appel en cours 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);
}

L'extrait de code suivant montre comment gérer l'intent dans 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);
        }
    });
}

Lorsque l'abonnement n'est plus nécessaire, votre application doit se désabonner en appelant Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

Analyser les messages de la balise

Pièces jointes pour les balises sont des blobs de données arbitraires que vous pouvez ajouter aux balises. Chaque pièce jointe se compose des éléments suivants:

  • Espace de noms: identifiant d'espace de noms.
  • Type: type de données.
  • Données: valeur des données du rattachement.

L'extrait de code suivant montre comment utiliser un écouteur de message pour analyser messages reçus d'une balise BLE:

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());
    }

    ...
};

L'analyse du contenu dépend du format des octets. Dans cet exemple, nous partons du principe que les octets de contenu encodent une chaîne UTF-8, mais que le message de votre balise encodez d'autres formats d'octets (par exemple, un tampon de protocole sérialisé). Pour en savoir plus, consultez Ajouter des pièces jointes aux balises.

Pour savoir quels espaces de noms sont associés à votre projet, appelez namespaces.list

Remarques :