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 assinar assinaturas de beacon BLE:
- Em primeiro plano, em resposta a uma ação ou evento do usuário.
- Em segundo plano, quando seu app não está sendo executado.
Assinar em primeiro plano
Quando seu app se inscreve em mensagens de beacon em primeiro plano, as verificações são executadas continuamente até que a inscrição seja cancelada. Só inicie uma assinatura em primeiro plano quando o app estiver 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 definindo a opção Strategy
como BLE_ONLY
.
O snippet de código abaixo demonstra o início de 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, o app precisará cancelar a inscrição
chamando o método
Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
.
Assinar em segundo plano
Quando seu app se inscreve em mensagens de beacon em segundo plano, as verificações de baixa potência são acionadas em eventos na tela, mesmo quando o app não está ativo no momento. Você pode usar essas notificações de verificação para ativar seu app em resposta a uma mensagem específica. As assinaturas em segundo plano consomem menos energia do que as assinaturas em primeiro plano, mas têm maior latência e menor confiabilidade.
Seu app pode iniciar uma assinatura em segundo plano chamando
Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
e definindo a opção Strategy
como BLE_ONLY
.
O snippet de código a seguir demonstra o início de uma assinatura em segundo plano
chamando
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 abaixo demonstra como processar a intent na
classe 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, o app precisará cancelar a inscrição
chamando o método
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 abaixo 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 pode codificar outros formatos de byte (por exemplo, um buffer de protocolo serializado). Para saber mais, 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.