Twoja aplikacja może subskrybować załączniki obrazów typu beacon Bluetooth Low Energy (BLE). za pomocą tego samego mechanizmu, który służy do subskrybowania wiadomości publikowanych przez z innymi urządzeniami w pobliżu. Po zasubskrybowaniu aplikacja automatycznie otrzyma wiadomości z beaconów i urządzeń w pobliżu.
Subskrybowanie komunikatów BLE beacon
Aplikacja może subskrybować wiadomości typu beacon BLE na 2 sposoby:
- na pierwszym planie, w odpowiedzi na działanie użytkownika; lub wydarzeniu.
- w tle, gdy aplikacja jest nie jest uruchomiony.
Subskrybuj na pierwszym planie
Gdy aplikacja subskrybuje wiadomości z obrazu typu beacon na pierwszym planie, skanowania są będą wykonywane przez cały czas, aż do momentu anulowania subskrypcji aplikacji. Rozpoczynanie tylko pierwszego planu subskrypcji, gdy aplikacja jest aktywna, zwykle w odpowiedzi na działanie użytkownika.
Aplikacja może zainicjować subskrypcję na pierwszym planie, wywołując
Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
i ustawienie opcji Strategy
na BLE_ONLY
.
Ten fragment kodu pokazuje inicjowanie subskrypcji na pierwszym planie
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);
}
Gdy subskrypcja nie jest już wymagana, aplikacja powinna anulować subskrypcję.
Połączenie
Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
Subskrybuj w tle
Gdy aplikacja subskrybuje wiadomości beacon w tle, skanowanie o niskim zużyciu energii są wywoływane w momencie wyświetlenia ekranu, nawet jeśli aplikacja nie jest aktualnie aktywna. Możesz użyć tych powiadomień o skanowaniach, aby „wybudzić” w odpowiedzi na konkretną wiadomość. Subskrypcje w tle zużywają mniej energii niż subskrypcji na pierwszym planie, ale mają one większe opóźnienie i mniejszą niezawodność.
Aplikacja może zainicjować subskrypcję w tle, nawiązując połączenie
Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
i ustawienie opcji Strategy
na BLE_ONLY
.
Ten fragment kodu pokazuje, jak zainicjować subskrypcję w tle przez
połączenia
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);
}
Ten fragment kodu pokazuje obsługę intencji w pliku
BeaconMessageReceiver
zajęcia.
@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);
}
});
}
Gdy subskrypcja nie jest już wymagana, aplikacja powinna anulować subskrypcję.
Połączenie
Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
Analizuj wiadomości typu beacon
Załączniki do beaconów to bloby dowolnych danych, które możesz dodać do beaconów. Każdy załącznik składa się z tych części:
- Przestrzeń nazw: identyfikator przestrzeni nazw.
- Typ: typ danych.
- Dane: wartość danych załącznika.
Ten fragment kodu pokazuje, jak używać odbiornika do analizowania wiadomości wiadomości odebrane z beaconu 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());
}
...
};
Analiza treści zależy od formatu bajtów. W tym przykładzie założono, że bajty treści kodują ciąg UTF-8, ale wiadomość typu beacon może kodować inne formaty bajtów (np. zserializowany bufor protokołu). Aby uzyskać więcej informacji, zobacz Add Attachments to beacons (Dodawanie załączników do obrazów typu beacon).
Aby dowiedzieć się, które przestrzenie nazw są powiązane z Twoim projektem, wywołaj namespaces.list.
Uwagi:
-
Aby wydłużyć czas pracy na baterii, zadzwoń pod numer
Nearby.getMessagesClient(Activity).unsubscribe()
w funkcjionStop()
w sekcji Aktywność. Pamiętaj, że ma to zastosowanie tylko wtedy, gdy zasubskrybowania na pierwszym planie. -
Aby skrócić czas oczekiwania, podczas wywoływania
Nearby.getMessagesClient(Activity).subscribe()
użyj opcjiStrategy.BLE_ONLY
. Gdy ta opcja jest skonfigurowana, interfejs Wiadomości w pobliżu nie aktywuje klasycznego Bluetootha skanowania. Powoduje to skrócenie czasu oczekiwania na wykrywanie beaconów, ponieważ system nie uwzględnia wszystkich możliwych typów skanowania. - Aby dołączyć do beaconu ładunek wiadomości, użyj funkcji Proximity Beacon API –