Receber mensagens de beacon

Seu app pode se inscrever em anexos de beacon do Bluetooth de baixa energia (BLE). usando o mesmo mecanismo usado para se inscrever em mensagens publicadas pela ou outros dispositivos por perto. Ao assinar, seu app receberá automaticamente de sensores e dispositivos próximos.

Inscrever-se em mensagens de beacon BLE

Há duas maneiras de o app se inscrever em mensagens de beacon BLE:

Assinar em primeiro plano

Quando seu app assina mensagens de beacon em primeiro plano, as verificações são até o cancelamento da inscrição. Iniciar apenas o primeiro plano assinatura quando o app está ativo, normalmente em resposta a uma ação do usuário.

Seu app pode iniciar uma assinatura em primeiro plano chamando Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) e definir a opção Strategy como BLE_ONLY.

O snippet de código a seguir demonstra como iniciar uma assinatura em primeiro 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);
}

Quando a assinatura não for mais necessária, ela deverá ser cancelada pelo app chamando Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

Assine em segundo plano

Quando seu app assina mensagens de beacon em segundo plano, verificações de baixo consumo de energia são acionados quando o aplicativo está na tela, mesmo quando ele não está ativo no momento. Você pode usar essas notificações de varredura para "acordar" seu app em resposta a um uma mensagem específica. As assinaturas em segundo plano consomem menos energia que assinaturas em primeiro plano, mas com maior latência e menor confiabilidade.

Seu app pode iniciar uma assinatura em segundo plano chamando Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) e definir a opção Strategy como BLE_ONLY.

O snippet de código a seguir demonstra o início de uma assinatura em segundo plano chamar 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);
}

O snippet de código a seguir demonstra o processamento da intent no 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);
        }
    });
}

Quando a assinatura não for mais necessária, ela deverá ser cancelada pelo app chamando Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

Analisar mensagens de beacon

Anexos de beacon são blobs de dados arbitrários que podem ser adicionados a beacons. Cada anexo consiste nas seguintes partes:

  • Namespace: um identificador de namespace.
  • Tipo: o tipo de dados.
  • Dados: o valor dos dados do anexo.

O snippet de código a seguir demonstra o uso de um listener de mensagens para analisar mensagens recebidas de um beacon 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());
    }

    ...
};

A análise do conteúdo depende do formato dos bytes. Este exemplo pressupõe que os bytes de conteúdo codificam uma string UTF-8, mas a mensagem de beacon codificar outros formatos de bytes (por exemplo, um buffer de protocolo serializado). Para mais informações, consulte Adicionar anexos a sensores.

Para descobrir quais namespaces estão associados ao projeto, chame namespaces.list correspondentes.

Observações: