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:
- No primeiro plano, em resposta a uma ação do usuário ou evento.
- Em segundo plano, quando o app estiver não está em execução.
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:
-
Para conservar a duração da bateria, chame
Nearby.getMessagesClient(Activity).unsubscribe()
. na funçãoonStop()
da atividade. Isso se aplica somente quando inscrição em primeiro plano. -
Para reduzir a latência, use a opção
Strategy.BLE_ONLY
ao chamarNearby.getMessagesClient(Activity).subscribe()
. Quando esta opção é definida, a API Nearby Messages não aciona o Bluetooth clássico. digitalizações. Isso melhora a latência da detecção de sensores, já que o sistema não percorre todos os tipos de varredura possíveis. - Para anexar um payload de mensagem a um beacon, use o API de beacon de proximidade.