Могу ли я сканировать iBeacons с помощью Play Services 9.2?

В примечаниях к выпуску 9.2 сервисов Google Play я нашел следующее:

Рядом, поблизости

В этом выпуске удалено требование, чтобы клиенты использовали API Proximity Beacon для управления своими маяками. Nearby теперь будет напрямую возвращать проанализированные рекламные объявления BLE, позволяя клиентам использовать собственное решение для интерпретации этих рекламных объявлений.

Для меня это звучит так, как будто я должен иметь возможность подписаться на сообщения поблизости с помощью Strategy.BLE_ONLY и получать информацию о маяках BLE (включая iBeacons) поблизости, не владея/не регистрируя маяки через API Proximity Beacon.

Я правильно понимаю? У кого-нибудь есть полезная ссылка на образец или другие ресурсы, которые могут помочь реализовать эту функцию?


person Florian Barth    schedule 16.08.2016    source источник


Ответы (2)


Подпишитесь с помощью MessageFilter, использующего includeIBeaconIds.

Код будет выглядеть примерно так:

MessageFilter filter = new MessageFilter.Builder()
    .includeIBeaconIds(MY_IBEACON_PROXIMITY_UUID, null, null)
    .build();
SubscribeOptions options = new SubscribeOptions.Builder()
    .setFilter(filter)
    .setStrategy(Strategy.BLE_ONLY)
    .build();
MessageListener listener = new MessageListener() {
  @Override
  public void onFound(Message message) {
    IBeaconId beaconId = IBeaconId.from(message);
    Log.i("Test", "Saw iBeacon " + beaconId);
  }
};
Nearby.Messages.subscribe(apiClient, messageListener, options);
person Brian Duff    schedule 17.08.2016
comment
Спасибо за пример кода. Также возможно ли сканировать все iBeacons, а не только MY_IBEACON_PORXIMITY_UUID? Могу ли я просто оставить вызов includeIBeaconIds или есть какое-то волшебное значение для MY_IBEACON_PORXIMITY_UUID, которое вернет все идентификаторы маяков? - person Florian Barth; 22.08.2016
comment
было бы здорово, если бы вы могли поделиться некоторыми идеями о сканировании всех ближайших идентификаторов маяков. Спасибо - person Florian Barth; 24.08.2016
comment
В настоящее время невозможно, извините. - person Brian Duff; 26.08.2016

Есть ли у кого-нибудь полезная ссылка на образец или другие ресурсы, которые могут помочь в реализации этой функции?

Прослушивание iBeacon с устройства Android возможно, что подтверждается в этом SO thread и это тоже. Вы можете использовать AltBeacon/android-beacon-library.

Это позволяет устройствам Android использовать маяки так же, как устройства iOS. Приложение может запрашивать уведомления при появлении или исчезновении одного или нескольких маяков. Приложение также может запросить обновление дальности от одного или нескольких маяков с частотой примерно 1 Гц.

Не забудьте прочитать об получении сообщений маяка. из Документов Google тоже.

Вот фрагмент при подписке на переднем плане:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mMessageListener = new MessageListener() {
        @Override
        public void onFound(Message message) {
            String messageAsString = new String(message.getContent());
            Log.d(TAG, "Found message: " + messageAsString);
        }

        @Override
        public void onLost(Message message) {
            String messageAsString = new String(message.getContent());
            Log.d(TAG, "Lost sight of message: " + messageAsString);
        }
    }
}
person noogui    schedule 18.08.2016
comment
Это был бы код, который вы использовали бы для извлечения вложения сообщения, например. маяк Эддистоуна. В нем отсутствует важная часть, где вы на самом деле подписываетесь, хотя, как показано в образце, из которого он был скопирован (developers.google.com/nearby/messages/android/). - person Brian Duff; 21.08.2016
comment
@noogui, спасибо за ответ. Мы уже используем AltBeacon и рассматриваем возможность перехода на функцию «Сообщения рядом». Документация, на которую вы ссылаетесь, предназначена для извлечения вложений сообщений (как уже упоминал brian-duff). - person Florian Barth; 22.08.2016
comment
@FlorianBarth Я думаю, что Брайан имеет право голоса, так как он работает над проектом Nearby в Google. Я просто цитирую то, что нашел из документации. - person noogui; 22.08.2016
comment
Спасибо за разъяснения и за вашу помощь, @noogui - person Florian Barth; 22.08.2016
comment
AltBeacon - единственный вариант? Как насчет поддержки маяков Play Service? - person IgorGanapolsky; 17.07.2017