Чтобы использовать Geofence API, пользователь должен предоставить приложение ACCESS_FINE_LOCATION
. Это место считается опасным и может быть отменено в любое время; После отмены этого разрешения приложение не может запрашивать обновления геозон.
Как разрешение ACCESS_BACKGROUND_LOCATION
вписывается в эту картинку? Мы точно знаем, что это разрешение также опасно и может быть отозвано в любое время. Означает ли это, что если мы хотим зарегистрировать какой-либо IntentService
который будет вызываться каждый раз, когда происходит изменение IntentService
, мы также должны убедиться, что пользователь предоставил разрешение ACCESS_BACKGROUND_LOCATION
? Или нам нужно использовать это разрешение, только если мы пытаемся получить текущее местоположение в нашей собственной фоновой службе /BroadcastReceiver?
Причина, по которой я задаю этот вопрос, заключается в том, что на данный момент документация выглядит немного расплывчатой: в документации, описывающей Q Developer Preview, упоминается, что геозонирование является одним из вариантов использования для фонового поиска местоположения, в то время как страница API геозонирования делает не упоминать ACCESS_BACKGROUND_LOCATION
среди своих требований.
Я думаю, что раздел " Перерегистрация геозон только тогда, когда это необходимо ":
Зарегистрированные геозоны хранятся в процессе
com.google.process.location
который принадлежит пакетуcom.google.android.gms
.
будет то, что это на самом деле не нужно, так как com.google.process.location
должен быть тем, кто получает данные о местоположении (поэтому тот, который должен запросить разрешение ACCESS_BACKGROUND_LOCATION
).
При этом, следуя этой логике, разрешение ACCESS_FINE_LOCATION
должно быть необходимым. Факт, что это необходимо, может быть из-за двух причин (я не знаю реальную причину):
Для меня второе предположение имеет больше смысла, а это означает, что даже если приложение технически не понадобится (процесс получения местоположения называется Play Service), оно требуется по соображениям конфиденциальности/безопасности.
Следуя этой логике, Google должен (будет?) Также применять ACCESS_BACKGROUND_LOCATION
как для обеспечения конфиденциальности/безопасности пользователя, так и для снижения потребления батареи.
В бета-версии 4 добавление ACCESS_BACKGROUND_LOCATION
когда ACCESS_BACKGROUND_LOCATION
не предоставляется, даже когда приложение полностью находится на переднем плане, завершается неудачно с кодом состояния 13 ("ошибка").
ACCESS_FINE_LOCATION
все же требуется.