La app puede suscribirse a los adjuntos de la baliza de Bluetooth de bajo consumo (BLE) con el mismo mecanismo que se usa para suscribirse a los mensajes publicados por otros dispositivos cercanos. Cuando te suscribas, tu app recibirá automáticamente de balizas y de dispositivos cercanos.
Suscribirse a mensajes de baliza BLE
Existen dos maneras en las que tu aplicación puede suscribirse a los mensajes de baliza BLE:
- En primer plano, en respuesta a la acción de un usuario o evento.
- En segundo plano, cuando la app esté no se ejecuta.
Suscribirse en primer plano
Cuando tu app se suscribe a los mensajes de baliza en primer plano, los escaneos se se ejecuten continuamente hasta que se anule la suscripción de la app. Iniciar solo un primer plano suscripción cuando la app está activa, por lo general, en respuesta a una acción del usuario.
Tu app puede iniciar una suscripción en primer plano llamando
Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
y estableciendo la opción Strategy
en BLE_ONLY
.
En el siguiente fragmento de código, se muestra cómo iniciar una suscripción en primer plano
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);
}
Cuando ya no se requiera la suscripción, tu app deberá anular la suscripción
llamando
Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
Suscribirse en segundo plano
Cuando tu app se suscribe a mensajes de baliza en segundo plano, los escaneos de bajo consumo se activan cuando se activa la pantalla, incluso cuando la app no está activa en ese momento. Puedes usar estas notificaciones de análisis para "activar" la aplicación en respuesta a un mensaje en particular. Las suscripciones en segundo plano consumen menos energía que suscripciones en primer plano, pero tienen mayor latencia y menor confiabilidad.
Tu app puede iniciar una suscripción en segundo plano llamando
Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
y estableciendo la opción Strategy
en BLE_ONLY
.
El siguiente fragmento de código demuestra el inicio de una suscripción en segundo plano mediante
llamando
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);
}
En el siguiente fragmento de código, se demuestra cómo manejar el intent en la
Clase 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);
}
});
}
Cuando ya no se requiera la suscripción, tu app deberá anular la suscripción
llamando
Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
Analizar mensajes del pixel contador
Archivos adjuntos del contador son BLOB de datos arbitrarios que puede agregar a las balizas. Cada adjunto consta de las siguientes partes:
- Espacio de nombres: Un identificador de espacio de nombres
- Type: el tipo de datos.
- Datos: el valor de datos del adjunto.
En el siguiente fragmento de código, se demuestra el uso de un objeto de escucha de mensajes para analizar recibidos desde una baliza 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());
}
...
};
El análisis del contenido depende del formato de los bytes. En este ejemplo, se supone que que los bytes de contenido codifiquen una cadena UTF-8, pero el mensaje contador puede para codificar otros formatos de bytes (por ejemplo, un búfer de protocolo serializado). Para obtener más información, consulta Cómo agregar archivos adjuntos a las balizas.
Para saber qué espacios de nombres se asocian con tu proyecto, llama namespaces.list.
Notas:
-
Para conservar la duración de batería, llama a
Nearby.getMessagesClient(Activity).unsubscribe()
. en la funciónonStop()
de tu actividad. Ten en cuenta que esto solo se aplica que se suscriban en primer plano. -
Para reducir la latencia, usa la opción
Strategy.BLE_ONLY
cuando llames aNearby.getMessagesClient(Activity).subscribe()
. Cuando se configura esta opción, la API de Nearby Messages no activará el Bluetooth clásico análisis. Esto mejora la latencia para la detección de balizas, ya que el sistema no pasa por todos los tipos de análisis posibles. - Para adjuntar la carga útil de un mensaje a una baliza, utilice el API de Proximity Beacon.