Я работаю над библиотекой, которую можно использовать для мониторинга геозон на устройствах Android. Я заметил, что геозоны, которые я регистрирую в классе GeofencingApi служб определения местоположения Google Play, теряются после того, как я отключаю и снова включаю службы определения местоположения в настройках устройства.
Я видел людей, предполагающих, что мне нужно чтобы зарегистрироваться для широковещательного приемника android.location.PROVIDERS_CHANGED
в моем файле AndroidManifest.xml
. Я сделал это, но этот широковещательный приемник вызывается только тогда, когда я добавляю и удаляю поставщиков тестов в своем тестовом приложении. Я вообще не получаю его при переключении Служб геолокации в настройках устройства.
Я делаю что-то неправильно? Кто-нибудь знает, как надежно определить, когда пользователь переключает службы определения местоположения в настройках устройства? Я хотел бы иметь возможность видеть эти события в фоновом режиме, даже если мое приложение не запущено.
Я полагаю, что мог бы настроить повторяющуюся задачу, которая работает в фоновом режиме и периодически проверяет, не были ли переключены службы определения местоположения, но это звучит грубо и неэффективно.
Если это поможет, я тестирую Moto G под управлением Android 4.4.2. Все, что я делал с геозонами, до сих пор работало нормально.
РЕДАКТИРОВАТЬ: Проведя дополнительные исследования, я обнаружил, что поведение трансляции PROVIDERS_CHANGED
сильно различается в зависимости от версии и модели телефона. Мой Nexus 5 под управлением Android 5.1, кажется, работает нормально — я могу очень регулярно получать трансляции PROVIDERS_CHANGED
. У меня также есть телефоны Moto G и Moto X с 4.4.x, и они никогда не производили для меня трансляцию PROVIDERS_CHANGED
. Samsung Galaxy S3 на Android 4.2 будет производить для меня трансляцию, но перестанет делать это после того, как я использовал свою активность на карте с поставщиками тестовых местоположений.
В любом случае, я решил прекратить заниматься этой проблемой на данный момент. Я думаю, что Android просто глючит.