Да, вы можете создать новый экземпляр RegionBootstrap. Отсутствие метода enable () объясняется просто тем, что он был разработан главным образом для сценариев использования с однократной настройкой. Чтобы отключить задания сканирования, вы используете `beaconManager.setEnableScheduledScanJobs (false); Чтобы включить их, вы вызываете с параметром, установленным в true. По умолчанию 8.0+ будут использовать задания сканирования, если вы не измените конфигурацию вручную. И чтобы быть ясным, вносите изменения в конфигурацию только в том случае, если вы в данный момент не связаны.

я хочу достичь

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

Что я планировал сделать

Мой первоначальный план состоял в том, чтобы создатьService, возвращаетSTART_STICKY вonStartCommand() чтобы убедиться, что служба перезапустится сама, даже если приложение убито диспетчером задач.

ЭтотService продолжит сканирование на наличие маяков.

На самом деле, это существующий подход моего коллеги. По словам этого коллеги, сервис запускается практически сразу после того, как приложение было убито диспетчером задач.

Проблема

Но вскоре я обнаружил, что такой подход проблематичен.
Вышеуказанный подход в настоящее время имеет 2 основные проблемы:

Он разряжает батареи, потому что он продолжает сканирование;Не работает на Android 8 из-зановые ограничения введены в Android 8.Мой следующий план

Хотя я знаю чтоJobScheduler может использоваться для замены Сервиса, который также являетсясуществующий подход Android Beacon Libraryвыполнять сканирование каждые 15-25 минут абсолютно не может соответствовать моим требованиям, когда маяки находятся очень близко друг к другу, и поэтому маяки необходимо часто сканировать.

Поэтому я придумываю другой план:

Используйте библиотеку Android Beacon для запуска обнаружения фонаКак только будет обнаружен первый маяк в списке фильтров, запустите службу переднего плана (которая не будет уничтожена даже в Android 8), котораяпостоянно сканировать маякиКогда все маяки в фильтре были закрыты, остановите вышеуказанную службу переднего плана. Библиотека Android Beacon вернется в состояние обнаружения фона.

Намерения этого подхода:

Воспользуйтесь функцией обнаружения фона Android Beacon Library, которая экономит заряд батареи, в зависимости от ихдокументацияОтойдите от Android Beacon Library в управлении Android 8 из-за встроенного ограничения длинного интервала сканированияСканирование продолжается даже на Android 8, так как я собираюсь использовать службу переднего планаМой главный вопрос

Читая документацию, я уже знаю, как сканировать маяки в фоновом режиме.
Но как использовать библиотеку Android Beacon для сканирования в сервисе переднего плана?
Кроме того, есть ли проблема, которую вы можете обнаружить в вышеупомянутом подходе / Есть ли у вас лучшие предложения для достижения таких требований?

Мой другой вопрос

На самом деле согласноэта почтазапускается фоновая служба5 минут после того, как приложение убито.
Но, вернувшисьSTART_STICKY вonStartCommand() изService, он перезапускается почти сразу.
Тогда почему будет задержка в 5 минут, даже в pre-Oreo?

Ответы на вопрос(1)

Ваш ответ на вопрос