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