Obtener mensajes de las balizas

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:

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: