Для защиты конфиденциальности пользователей приложения, использующие службы определения местоположения, должны запрашивать разрешение на определение местоположения.
Множество разрешений связано с местоположением. Какие именно разрешения запрашиваются и как они запрашиваются, зависит от требований к местоположению для конкретного сценария использования вашего приложения.
На этой странице описаны различные типы требований к местоположению и объясняется, как запросить разрешение на доступ к данным о местоположении в каждом конкретном случае.
Для запроса разрешений на доступ к местоположению следуйте рекомендациям по настройке всех разрешений во время выполнения .
Типы доступа к местоположению
Каждое разрешение обладает сочетанием следующих характеристик:
- Категория : Либо передний план , либо задний план .
- Точность : либо точное местоположение, либо приблизительное местоположение.
Местоположение на переднем плане
Если ваше приложение содержит функцию, которая передает или получает информацию о местоположении только один раз или в течение определенного периода времени, то для этой функции требуется доступ к местоположению в активном режиме. Примеры таких функций:
- В навигационном приложении есть функция, позволяющая пользователям получать пошаговые инструкции по маршруту.
- В мессенджерах есть функция, позволяющая пользователям делиться своим текущим местоположением с другим пользователем.
Система считает, что ваше приложение использует местоположение в активном режиме, если какая-либо функция вашего приложения обращается к текущему местоположению устройства в одной из следующих ситуаций:
- Отображается активность, принадлежащая вашему приложению.
Ваше приложение работает в фоновом режиме. Когда работает фоновая служба, система информирует пользователя, отображая постоянное уведомление. Ваше приложение сохраняет доступ к ней, даже когда оно переведено в фоновый режим, например, когда пользователь нажимает кнопку «Домой» на своем устройстве или выключает экран.
Кроме того, необходимо объявить тип службы переднего плана —
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 геозонирования . Вот несколько примеров:
- В приложении для обмена местоположением между членами семьи есть функция, позволяющая пользователям постоянно делиться своим местоположением с другими членами семьи.
- В приложениях для Интернета вещей есть функция, позволяющая пользователям настраивать свои домашние устройства таким образом, чтобы они выключались, когда пользователь покидает дом, и снова включались, когда пользователь возвращается домой.
Система считает, что ваше приложение использует определение местоположения в фоновом режиме, если оно обращается к текущему местоположению устройства в любой ситуации, кроме тех, которые описаны в разделе определения местоположения в активном режиме . Точность определения местоположения в фоновом режиме совпадает с точностью определения местоположения в активном режиме и зависит от разрешений на определение местоположения, которые объявляет ваше приложение.
В 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 . Подробнее об этом можно прочитать в статье блога на Medium «Как понять поведение зависимостей вашего SDK» .
Дополнительные ресурсы
Для получения дополнительной информации о разрешениях на определение местоположения в Android ознакомьтесь со следующими материалами:
Кодлабс
Видео
Образцы
- Пример приложения , демонстрирующий использование разрешений на определение местоположения.