Явное управление запуском и остановкой сканирования через Android AltBeacon Library

Я использую библиотеку Android AltBeacon для мониторинга и определения дальности iBeacon поблизости. Одно из конкретных требований этого приложения - разрешение сканирования на обнаружение маяков, даже когда приложение работает в фоновом режиме, и полная остановка при закрытии приложения.

Это требование, как я понимаю, можно частично удовлетворить с помощью BootstrapNotifier / RegionBootstrap, но служба сканирования перезапускается, даже когда приложение закрывается, чего я не хочу.

Мое обходное решение заключалось в том, чтобы реализовать всю логику сканирования в отдельной службе, которую можно было останавливать и запускать по мере необходимости. Сказав это, библиотека AltBeacon по своей сути сама по себе является службой, поэтому, по сути, я запускаю службу внутри службы, что на самом деле не имеет большого смысла.

Есть ли лучшие способы сделать это? Любые идеи были бы хорошы.


person Aneeb Khawar    schedule 06.09.2016    source источник


Ответы (1)


Если вы не хотите, чтобы библиотека автоматически перезапускала сканирование, вы можете отключить ее StartupBroadcastReceiver, отредактировав ApplicationManifest.xml следующим образом:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" ... >
  <application ... >
    <receiver android:name="org.altbeacon.beacon.startup.StartupBroadcastReceiver" 
              tools:node="remove" />
    ...

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

person davidgyoung    schedule 06.09.2016
comment
Спасибо, Дэвид. Переосмысление этого сценария нехватки памяти довольно убедительно. Возможно, тогда мне стоит продолжить запускать его в специальной службе. - person Aneeb Khawar; 06.09.2016
comment
Пользовательская служба не помешает приложению быть убитым из-за нехватки памяти. Вот почему я обычно вижу, что Pandora или приложение для подкастов перестают воспроизводиться, когда я делаю что-то на своем телефоне, требующее интенсивного использования памяти. В этом весь смысл самой библиотеки Android Beacon, которая планирует перезапуск в будущем, если это произойдет. - person davidgyoung; 06.09.2016
comment
Да, чтобы учесть эту ситуацию, я добавил некоторую дополнительную логику с диспетчером аварийных сигналов, чтобы гарантировать, что служба работает через определенный интервал, а затем полностью отменить диспетчер аварийных сигналов после завершения. Это своего рода изобретение колеса заново. - person Aneeb Khawar; 07.09.2016