Ваше приложение может подписаться на вложения маяка Bluetooth Low Energy (BLE), используя тот же механизм, который используется для подписки на сообщения, публикуемые другими близлежащими устройствами. При подписке ваше приложение будет автоматически получать сообщения как от маяков, так и от устройств поблизости.
Подпишитесь на сообщения маяка BLE
Ваше приложение может подписаться на сообщения маяка BLE двумя способами:
- На переднем плане в ответ на действие или событие пользователя.
- В фоновом режиме , когда ваше приложение не работает.
Подписка на переднем плане
Когда ваше приложение подписывается на сообщения маяка на переднем плане, сканирование выполняется непрерывно, пока ваше приложение не откажется от подписки. Запускайте подписку на передний план только тогда, когда ваше приложение активно, обычно в ответ на действие пользователя.
Ваше приложение может инициировать подписку на передний план, вызвав Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
и установив для параметра Strategy
значение BLE_ONLY
.
В следующем фрагменте кода показано инициирование подписки на передний план 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);
}
Когда подписка больше не требуется, ваше приложение должно отказаться от подписки, вызвав Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
.
Подписаться в фоновом режиме
Когда ваше приложение подписывается на сообщения маяка в фоновом режиме, сканирование с низким энергопотреблением запускается при событиях включения экрана, даже если ваше приложение в данный момент не активно. Вы можете использовать эти уведомления о сканировании, чтобы «разбудить» ваше приложение в ответ на определенное сообщение. Фоновые подписки потребляют меньше энергии, чем приоритетные, но имеют более высокую задержку и более низкую надежность.
Ваше приложение может инициировать фоновую подписку, вызвав Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
и установив для параметра Strategy
значение BLE_ONLY
.
В следующем фрагменте кода показано инициирование фоновой подписки путем вызова 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);
}
Следующий фрагмент кода демонстрирует обработку намерения в классе 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);
}
});
}
Когда подписка больше не требуется, ваше приложение должно отказаться от подписки, вызвав Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
.
Анализ сообщений маяка
Вложения маяков представляют собой блоки произвольных данных, которые вы можете добавить в маяки . Каждое дополнение состоит из следующих частей:
- Пространство имен: идентификатор пространства имен.
- Тип: тип данных.
- Данные: значение данных для вложения.
В следующем фрагменте кода показано использование прослушивателя сообщений для анализа сообщений, полученных от маяка 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());
}
...
};
Анализ содержимого зависит от формата байтов. В этом примере предполагается, что байты содержимого кодируют строку UTF-8, но ваше сообщение маяка может кодировать другие форматы байтов (например, сериализованный буфер протокола). Дополнительную информацию см. в разделе «Добавление вложений к маякам» .
Чтобы узнать, какие пространства имен связаны с вашим проектом, вызовите namespaces.list .
Примечания:
- Чтобы продлить срок службы батареи, вызовите
Nearby.getMessagesClient(Activity).unsubscribe()
в функцииonStop()
вашего Activity. Обратите внимание, что это применимо только при подписке на переднем плане . - Чтобы уменьшить задержку, используйте параметр
Strategy.BLE_ONLY
при вызовеNearby.getMessagesClient(Activity).subscribe()
. Если этот параметр установлен, API сообщений поблизости не будет запускать классическое сканирование Bluetooth. Это уменьшает задержку обнаружения маяков, поскольку система не перебирает все возможные типы сканирования. - Чтобы прикрепить полезную нагрузку сообщения к маяку, используйте API Proximity Beacon .
Ваше приложение может подписаться на вложения маяка Bluetooth Low Energy (BLE), используя тот же механизм, который используется для подписки на сообщения, публикуемые другими близлежащими устройствами. При подписке ваше приложение будет автоматически получать сообщения как от маяков, так и от устройств поблизости.
Подпишитесь на сообщения маяка BLE
Ваше приложение может подписаться на сообщения маяка BLE двумя способами:
- На переднем плане в ответ на действие или событие пользователя.
- В фоновом режиме , когда ваше приложение не работает.
Подписка на переднем плане
Когда ваше приложение подписывается на сообщения маяка на переднем плане, сканирование выполняется непрерывно, пока ваше приложение не откажется от подписки. Запускайте подписку на передний план только тогда, когда ваше приложение активно, обычно в ответ на действие пользователя.
Ваше приложение может инициировать подписку на передний план, вызвав Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions)
и установив для параметра Strategy
значение BLE_ONLY
.
В следующем фрагменте кода показано инициирование подписки на передний план 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);
}
Когда подписка больше не требуется, ваше приложение должно отказаться от подписки, вызвав Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)
.
Подписаться в фоновом режиме
Когда ваше приложение подписывается на сообщения маяка в фоновом режиме, сканирование с низким энергопотреблением запускается при событиях включения экрана, даже если ваше приложение в данный момент не активно. Вы можете использовать эти уведомления о сканировании, чтобы «разбудить» ваше приложение в ответ на определенное сообщение. Фоновые подписки потребляют меньше энергии, чем приоритетные, но имеют более высокую задержку и более низкую надежность.
Ваше приложение может инициировать фоновую подписку, вызвав Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)
и установив для параметра Strategy
значение BLE_ONLY
.
В следующем фрагменте кода показано инициирование фоновой подписки путем вызова 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);
}
Следующий фрагмент кода демонстрирует обработку намерения в классе 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);
}
});
}
Когда подписка больше не требуется, ваше приложение должно отказаться от подписки, вызвав Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)
.
Анализ сообщений маяка
Вложения маяков представляют собой блоки произвольных данных, которые вы можете добавить в маяки . Каждое дополнение состоит из следующих частей:
- Пространство имен: идентификатор пространства имен.
- Тип: тип данных.
- Данные: значение данных для вложения.
В следующем фрагменте кода показано использование прослушивателя сообщений для анализа сообщений, полученных от маяка 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());
}
...
};
Анализ содержимого зависит от формата байтов. В этом примере предполагается, что байты содержимого кодируют строку UTF-8, но ваше сообщение маяка может кодировать другие форматы байтов (например, сериализованный буфер протокола). Дополнительную информацию см. в разделе «Добавление вложений к маякам» .
Чтобы узнать, какие пространства имен связаны с вашим проектом, вызовите namespaces.list .
Примечания:
- Чтобы продлить срок службы батареи, вызовите
Nearby.getMessagesClient(Activity).unsubscribe()
в функцииonStop()
вашего Activity. Обратите внимание, что это применимо только при подписке на переднем плане . - Чтобы уменьшить задержку, используйте параметр
Strategy.BLE_ONLY
при вызовеNearby.getMessagesClient(Activity).subscribe()
. Если этот параметр установлен, API сообщений поблизости не будет запускать классическое сканирование Bluetooth. Это уменьшает задержку обнаружения маяков, поскольку система не перебирает все возможные типы сканирования. - Чтобы прикрепить полезную нагрузку сообщения к маяку, используйте API Proximity Beacon .