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: