Чтобы защитить конфиденциальность пользователей, приложения, использующие службы определения местоположения, должны запрашивать разрешения на определение местоположения.
С местоположением связано множество разрешений. То, какие разрешения и как вы их запрашиваете, зависит от требований к местоположению для вашего приложения.
На этой странице описываются различные типы требований к местоположению и объясняется, как запрашивать разрешения на местоположение в каждом случае.
Чтобы запросить разрешения на определение местоположения, следуйте рекомендациям для всех разрешений времени выполнения .
Типы доступа к местоположению
Каждое разрешение имеет комбинацию следующих характеристик:
- Категория : Расположение на переднем плане или на заднем плане .
- Точность : точное или приблизительное местоположение.
Расположение на переднем плане
Если ваше приложение содержит функцию, которая передает или получает информацию о местоположении только один раз или в течение определённого периода времени, то этой функции требуется доступ к данным о местоположении в активном режиме. Вот несколько примеров:
- В навигационном приложении функция позволяет пользователям получать пошаговые инструкции.
- В приложении для обмена сообщениями появилась функция, позволяющая пользователям делиться своим текущим местоположением с другими пользователями.
Система считает, что ваше приложение использует местоположение переднего плана, если функция вашего приложения получает доступ к текущему местоположению устройства в одной из следующих ситуаций:
- Видна активность, принадлежащая вашему приложению.
Ваше приложение запускает службу переднего плана. Когда служба переднего плана запущена, система информирует пользователя об этом, показывая постоянное уведомление. Ваше приложение сохраняет доступ, когда оно находится в фоновом режиме, например, когда пользователь нажимает кнопку «Домой» на своём устройстве или выключает дисплей.
Кроме того, необходимо объявить тип службы переднего плана
location
, как показано в следующем фрагменте кода. В Android 10 (уровень API 29) и выше необходимо объявить этот тип службы переднего плана.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
Вы объявляете необходимость определения местоположения на переднем плане, когда ваше приложение запрашивает разрешение ACCESS_COARSE_LOCATION
или разрешение ACCESS_FINE_LOCATION
, как показано в следующем фрагменте:
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
Фоновое местоположение
Приложению требуется доступ к данным о местоположении в фоновом режиме, если его функция постоянно передает данные о местоположении другим пользователям или использует API геозон . Вот несколько примеров:
- В приложении для обмена местоположением с семьей появилась функция, позволяющая пользователям постоянно делиться своим местоположением с членами семьи.
- В приложении IoT есть функция, позволяющая пользователям настраивать свои домашние устройства таким образом, чтобы они выключались, когда пользователь уходит из дома, и включались снова, когда пользователь возвращается домой.
Система считает, что ваше приложение использует данные о местоположении в фоновом режиме, если оно обращается к текущему местоположению устройства в любой ситуации, отличной от описанной в разделе «Данные о местоположении в активном режиме» . Точность определения местоположения в фоновом режиме совпадает с точностью определения местоположения в активном режиме , которая зависит от разрешений на доступ к данным о местоположении, указанных в вашем приложении.
В Android 10 (уровень API 29) и выше необходимо объявить разрешение ACCESS_BACKGROUND_LOCATION
в манифесте приложения, чтобы запросить доступ к данным о местоположении в фоновом режиме во время выполнения. В более ранних версиях Android, когда приложение получает доступ к данным о местоположении в фоновом режиме, оно автоматически получает и доступ к данным о местоположении в фоновом режиме.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
Точность
Android поддерживает следующие уровни точности определения местоположения:
- Приблизительный
- Предоставляет приблизительное местоположение устройства. Если это приблизительное местоположение получено от
LocationManagerService
илиFusedLocationProvider
, оно оценивается с точностью до 3 квадратных километров (около 1,2 квадратных миль). Ваше приложение может получать данные о местоположении с такой точностью, если вы укажете разрешениеACCESS_COARSE_LOCATION
, но неACCESS_FINE_LOCATION
. - Точный
- Обеспечивает максимально точную оценку местоположения устройства. Если оценка местоположения получена от
LocationManagerService
илиFusedLocationProvider
, она обычно составляет около 50 метров (160 футов), а иногда и несколько метров (10 футов) или даже меньше. Ваше приложение может получать данные о местоположении с такой точностью, если вы укажете разрешениеACCESS_FINE_LOCATION
.
Если пользователь предоставляет разрешение на приблизительное местоположение , ваше приложение будет иметь доступ только к приблизительному местоположению, независимо от того, какие разрешения на местоположение объявляет ваше приложение.
Ваше приложение должно работать, даже если пользователь предоставляет доступ только к приблизительному местоположению. Если функция вашего приложения требует доступа к точному местоположению с помощью разрешения ACCESS_FINE_LOCATION
, вы можете попросить пользователя разрешить приложению доступ к точному местоположению .
Напоминание о гранте на определение местоположения
В Android 10 (уровень API 29) и более поздних версиях, когда функция вашего приложения впервые обращается к данным о местоположении устройства в фоновом режиме после того, как пользователь предоставил ему доступ к данным о местоположении в фоновом режиме, система планирует отправку уведомления пользователю. Это уведомление напоминает пользователю о том, что он разрешил приложению постоянный доступ к данным о местоположении устройства. Пример уведомления представлен на рисунке 8.
Проверьте требования к местоположению в зависимостях SDK вашего приложения.
Проверьте, использует ли ваше приложение какие-либо SDK, зависящие от разрешений на доступ к данным о местоположении, особенно разрешение ACCESS_FINE_LOCATION
. Подробнее читайте в статье «Знакомство с поведением зависимостей SDK» на Medium.
Дополнительные ресурсы
Дополнительную информацию о разрешениях на определение местоположения в Android можно найти в следующих материалах:
Codelabs
Видео
Образцы
- Пример приложения , демонстрирующего использование разрешений на определение местоположения.