La tua app può abbonarsi agli allegamenti beacon Bluetooth Low Energy (BLE) usando lo stesso meccanismo usato per sottoscrivere i messaggi pubblicati altri dispositivi nelle vicinanze. Quando ti abboni, la tua app riceverà automaticamente messaggi provenienti sia da beacon che da dispositivi nelle vicinanze.
Iscriviti ai messaggi beacon BLE
Esistono due modi in cui la tua app può iscriversi ai messaggi di beacon BLE:
- In primo piano, in risposta a un'azione dell'utente o evento.
- In background, quando la tua app viene non in esecuzione.
Iscriviti in primo piano
Quando la tua app sottoscrive i messaggi di beaconing in primo piano, le analisi vengono eseguiti continuamente finché l'app non annulla l'iscrizione. Avvia solo un primo piano dell'abbonamento quando la tua app è attiva, in genere in risposta a un'azione dell'utente.
La tua app può avviare un abbonamento in primo piano chiamando
Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
e impostando l'opzione Strategy
su BLE_ONLY
.
Il seguente snippet di codice mostra l'avvio di un abbonamento in primo piano
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 l'abbonamento non è più necessario, l'app dovrebbe annullare l'iscrizione
chiamando
Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
Abbonati in background
Quando l'app effettua la sottoscrizione ai messaggi di beaconing in background, scansioni a basso consumo vengono attivati in corrispondenza di eventi di schermata, anche quando l'app non è attualmente attiva. Puoi utilizzare queste notifiche di scansione per "svegliarti" la tua app in risposta a un un particolare messaggio. Gli abbonamenti in background consumano meno energia rispetto sottoscrizioni in primo piano, ma hanno una latenza più alta e un'affidabilità minore.
La tua app può avviare un abbonamento in background chiamando
Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
e impostando l'opzione Strategy
su BLE_ONLY
.
Il seguente snippet di codice mostra l'avvio di un abbonamento in background tramite
chiamata
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);
}
Il seguente snippet di codice illustra la gestione dell'intent nel
BeaconMessageReceiver
corso.
@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 l'abbonamento non è più necessario, l'app dovrebbe annullare l'iscrizione
chiamando
Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
Analizza i messaggi di beaconing
Allegati di beacon sono blob di dati arbitrari che puoi aggiungere ai beacon. Ogni allegato è costituito dalle seguenti parti:
- Spazio dei nomi: un identificatore dello spazio dei nomi.
- Tipo: il tipo di dati.
- Dati: il valore dei dati per l'allegato.
Il seguente snippet di codice dimostra l'utilizzo di un listener di messaggi per l'analisi messaggi ricevuti da un 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());
}
...
};
L'analisi dei contenuti dipende dal formato dei byte. Questo esempio presuppone che i byte dei contenuti codificano una stringa UTF-8, ma il messaggio beacon può Codificare altri formati byte (ad esempio un buffer di protocollo serializzato). Per ulteriori informazioni, consulta Aggiungere allegati ai beacon.
Per scoprire quali spazi dei nomi sono associati al tuo progetto, chiama namespaces.list.
Note:
-
Per prolungare la durata della batteria, chiama il numero
Nearby.getMessagesClient(Activity).unsubscribe()
nella funzioneonStop()
delle tue attività. Tieni presente che ciò si applica solo se Abbonandoti in primo piano. -
Per ridurre la latenza, utilizza l'opzione
Strategy.BLE_ONLY
quando chiamiNearby.getMessagesClient(Activity).subscribe()
. Se questa opzione è impostata, l'API Nearby Messages non attiverà il Bluetooth classico scansioni. Ciò migliora la latenza per il rilevamento dei beacon, poiché il sistema non esegue in sequenza tutti i possibili tipi di analisi. - Per allegare un payload di messaggi a un beacon, utilizza API Proximity Beacon.