Beacon Ranging с использованием фреймворка ProximityKit для Android

Я работаю над интеграцией фреймворка ProximityKit в наше приложение для Android для обнаружения маяков, которые мы приобрели у RadiusNetworks. Мы хотели, чтобы приложение могло определять дальность или обнаруживать маяки с учетом трех состояний приложения Android, которые работают на переднем плане, работают в фоновом режиме и если приложение убито с помощью переключателя задач (смахивает прочь). На данный момент мы используем метод didRangeBeaconsInRegion из фреймворка ProximityKit для отслеживания журналов при обнаружении маяков. Ниже приведены наши выводы:

  1. Приложение на переднем плане
    • Приложение может определять дальность действия маяков, обеспечивая журнал для каждого обнаруженного маяка. каждую секунду
    • Тем не менее, я заметил, что в режиме отладки консоль быстро показывала множество похожих журналов с сообщениями ниже во время ранжирования маяка, что, как я думаю, может повлиять на производительность устройства, использование батареи и ситуации, когда устройство каким-то образом нагревается:

04-20 14:16:17.258 18908-19492/com.droid.mobile.cho D/ScanRecord: first manudata for manu ID 04-20 14:16:17.273 18908-18920/com.droid.mobile.cho D/ScanRecord: parseFromBytes

  1. Приложение в фоновом режиме / свернуто

    • Приложение может определять расстояние между маяками, обеспечивая журнал для каждого маяка, обнаруженного каждые пять минут в Android N или более ранней версии; однако каждые 15 минут в версиях Android O
  2. Приложение убито из переключателя задач (смахнуто)

    • Приложение НЕ может определять дальность действия маяков (проверяется запуском локального уведомления, если маяк находится в диапазоне, однако локальное уведомление не отображается; протестировано до 20 минут ожидания)
    • Мы придумали решение, которое заключается в реализации службы, работающей в фоновом режиме, для обработки дальности радиомаяка комплекта приближения, однако было бы неплохо узнать, есть ли более идеальный способ справиться с этим случаем.
    • После реализации фоновой службы ранжирование маяков работает так же, как в сценарии № 1 выше.
    • Я также попытался проверить журналы устройства через 15 минут после того, как приложение было удалено из переключателя задач:

04-23 10:34:44.449 13220-13220/com.droid.mobile.cho I/BeaconManager: BeaconManager started up on pid 13220 named 'com.droid.mobile.cho' for application package 'com.droid.mobile.cho'. isMainProcess=true 04-23 10:34:44.452 13220-13220/com.droid.mobile.cho D/BeaconParser: Parsing beacon layout: m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25 04-23 10:48:02.760 13220-13228/com.droid.mobile.cho W/art: Suspending all threads took: 11.608ms 04-23 10:48:52.624 13220-13228/com.droid.mobile.cho W/art: Suspending all threads took: 25.439ms

  • Судя по журналам чуть выше, кажется, что после почти 15 минут закрытия приложения все потоки на устройстве были приостановлены.

В качестве тестовых устройств мы использовали телефон LG G3 под управлением ОС Android 5.0.2 и телефон Samsung Galaxy S6 под управлением ОС Android 7.0.

Принимая во внимание наши вышеупомянутые результаты, у нас есть наши основные опасения по поводу сценариев, когда приложение прекращается из-за переключателя задач, что приводит к тому, что приложение не обнаруживает никаких маяков, а несколько журналов консоли отображаются, когда приложение работает на переднем плане. Было бы здорово, если бы приложение могло обрабатывать все три сценария при правильном расположении маяков.

Заранее благодарю за ответ.

В случае смахивания приложения с экрана с помощью переключателя задач, возможно, обнаруживаются маяки, но уведомление по какой-то причине блокируется операционной системой. Мне было бы любопытно узнать, показывает ли LogCat какие-либо признаки приложения, если за ним следят в течение 15 минут после того, как вы проведете его с экрана. Конечно, идентификатор процесса изменится при перезапуске приложения, поэтому вам придется отфильтровать LogCat для известного шаблона журнала из приложения, а затем вернуться и отфильтровать PID, который вы видите, чтобы попытаться получить более подробную информацию о том, что продолжается.

davidgyoung 23.04.2018 15:12

Спасибо за ответ @davidgyoung ..

Darrell 23.04.2018 17:27

Я попытался воспроизвести и скопировать некоторые журналы, которые, по моему мнению, полезны для проверки любых признаков приложения, через 15 минут приложение удаляется из переключателя задач (журналы см. В моем отредактированном сообщении выше).

Darrell 23.04.2018 17:36

Эти строки журнала выглядят как обычная сборка мусора - я не думаю, что это означает, что приложение было приостановлено, на самом деле я думаю, что оно работает нормально. Интересно, не перезапускается ли ProximityKit при перезапуске приложения нормально. Вы можете попробовать записать строки в журнал, когда приложение вызывает pkManager.start(); и получает обратные вызовы в didSync() или didFailSync(), а также в didEnterRegion() и т. д. При устранении неполадок при автоматическом перезапуске после отключения от переключателя задач подробное ведение журнала - ваш друг.

davidgyoung 23.04.2018 21:39

Дэвид, просто хотел подтвердить, является ли это хорошим обходным путем для реализации настраиваемой фоновой службы, использующей методы ProximityKit, для решения проблемы, когда состояние приложения убивается из переключателя задач? Я думаю, что фреймворк ProximityKit для Android состоит из библиотеки Android Beacon, поэтому, если это решение будет реализовано, существует вероятность того, что существующая служба из ProximityKit будет работать в другой настраиваемой фоновой службе. Пожалуйста, дайте мне знать, верны ли мои предположения. Спасибо.

Darrell 27.04.2018 20:42

Настраиваемая фоновая служба должна быть в порядке, поскольку при нормальных условиях она находится в том же процессе Android, что и приложение переднего плана. Поскольку BeaconManager библиотеки Android Beacon является одноэлементным, будет один экземпляр, совместно используемый фоновым процессом и приложением переднего плана. Однако будьте осторожны с Android 8+, так как он блокирует длительные фоновые процессы.

davidgyoung 27.04.2018 22:23

Спасибо @davidgyoung за подтверждение решения относительно реализации настраиваемой фоновой службы. Я повторно реализовал это решение и настроил настраиваемую службу с помощью START_STICKY, так что она будет перезапущена, когда приложение будет убито из переключателя задач. Однако проблема, которую я заметил, связана с расходом заряда батареи телефона, когда он оставлен работать в течение нескольких часов.

Darrell 30.04.2018 21:35

Это может быть связано с тем, что, когда приложение убивается из переключателя задач, оно работает так же, как когда приложение работает на переднем плане, учитывая, что была реализована фоновая служба (отличается, когда приложение работает в фоновом режиме / свернуто, поскольку методы делегата запускаются каждые 5 или 15 минут в зависимости от на ОС Android).

Darrell 30.04.2018 21:35

Я также попытался добавить журналы для некоторых методов делегата ProximityKit didSync() и didFailSync(), чтобы проверить, перезапускается ли ProximityKit нормально или нет, когда приложение убивается из переключателя задач. Однако, согласно моему тестированию, связанные журналы не отображались в консоли, когда я выполнял сценарий и ждал не более 20 минут.

Darrell 30.04.2018 21:35

Еще одна проблема, о которой мы хотели сообщить, - это решить, следует ли переходить с использования инфраструктуры ProximityKit на библиотеку Android Beacon или продолжать использовать ProximityKit. Мы также слышали некоторые новости о том, что есть соображения по прекращению поддержки фреймворка ProximityKit. Для нас было бы предпочтительнее продолжать использовать ProximityKit, поскольку мы использовали портал Radius Networks при настройке маяков и добавлении некоторых атрибутов метаданных, которые обрабатывались фреймворком и необходимы для нашего варианта использования приложения.

Darrell 30.04.2018 21:36

Однако мы также открыты для перехода на библиотеку Android Beacon, если это идеальное решение для долгосрочных случаев. Было бы здорово, если бы вы могли поделиться своими мыслями по этому поводу. Спасибо, @davidgyoung!

Darrell 30.04.2018 21:36

Я ничего не знаю о планах по прекращению поддержки ProximityKit, но я не работаю в Radius Networks изо дня в день, так что эти знания на самом деле ничего не значат. Библиотека Android Beacon является открытым исходным кодом и очень широко используется по состоянию на апрель 2018 года, поэтому очень маловероятно, что сообщество с открытым исходным кодом откажется от нее в ближайшее время, даже если ее ведущий разработчик (ваш искренне) упадет со скалы.

davidgyoung 30.04.2018 22:38

Самое забавное в результатах ваших тестов заключается в том, что ProximityKit использует AndoridBeaconLibrary под капотом. В Android 4.3.x-7.x сама библиотека Android Beacon использует BeaconService с флагом START_STICKY. Поэтому он должен запускаться автоматически, как и ваша служба. Я ожидал, что вы увидите эту информационную строку журнала: github.com/AltBeacon/android-beacon-library/blob/master/src/‌…. Вы можете проверить свой слился ApplicationManifest.xml, чтобы узнать, есть ли у BeaconService этот флаг.

davidgyoung 30.04.2018 22:43

Спасибо за информацию, которую вы предоставили @davidgyoung. Я смог увидеть журнал, который вы упомянули в своем предыдущем комментарии в нашем приложении, после того, как был запущен менеджер близостиKit. Тем не менее, по-прежнему замечая, что приложение не могло определять маяки, когда приложение было убито из переключателя задач, проверенного с помощью журналов и локальных уведомлений. Я также получил копию эталонного приложения Android ProximityKit от github.com/RadiusNetworks/proximitykit-reference-android и заметил, что та же проблема возникает в этом эталонном приложении.

Darrell 03.05.2018 22:33

Дэвид, просто интересно, есть ли у вас рекомендуемые решения, кроме реализации настраиваемой фоновой службы, поскольку кажется, что это не идеальное решение, учитывая, в основном, использование батареи приложения (поскольку это будет продолжать работать в фоновом режиме в течение длительного периода времени). Или вы думаете, что это то, что можно будет рассмотреть и решить в будущих выпусках фреймворка ProximityKit? Еще раз спасибо @davidgyoung за помощь и быстрый ответ.

Darrell 03.05.2018 22:34

Ваша фоновая служба не должна использовать ЦП, если она все время спит. Это что-нибудь делает? Извините, я не могу говорить о планах на будущие релизы Proximity. Вам придется обратиться в службу поддержки Radius.

davidgyoung 04.05.2018 01:30
0
16
404
0

Другие вопросы по теме

Проблемы с мониторингом маяка в iOS 11
Фоновое сканирование библиотеки Android Beacon с помощью setIntentScanningStrategyEnabled(true) не обнаруживает маяк
Как библиотека обнаруживает маяк через 5 секунд после закрытия приложения для платформ 5–7?
Kontakt.io SDK: есть ли способ жестко закодировать список маяков, чтобы я мог выбирать из них случайным образом всякий раз, когда мне нужно искать маяк?
Почему в библиотеке существует ограничение на мажор 65535 при использовании формата UID eddystone? Могу ли я переопределить это ограничение?
Есть ли способ улучшить обнаружение маяков с помощью altbeacon при сканировании устройства на переднем плане?
Android, как получить положительное и отрицательное значение оси X Ibeacon?
Как реализовать JobScheduler для сканирования маяков Bluetooth в фоновом режиме?
Неправильное расстояние, показывающее altbeacon в Android?
Фильтр RSSI для библиотеки Android Beacon