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 appli 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 :
-
Pour prolonger l'autonomie de la batterie, appelez
Nearby.getMessagesClient(Activity).unsubscribe()
dans la fonctiononStop()
de votre activité. Notez que cela ne s'applique l'abonnement au premier plan ; -
Pour réduire la latence, utilisez l'option
Strategy.BLE_ONLY
lorsque vous appelezNearby.getMessagesClient(Activity).subscribe()
. Lorsque cette option est définie, l'API Nearby Messages ne déclenche pas le Bluetooth classique de données. Cela réduit la latence de détection des balises, car le système ne passe pas en revue tous les types de recherche possibles. - Pour joindre une charge utile de message à une balise, utilisez la méthode API Proximity Beacon :