Когда мне следует использовать разрешение ACCESS_COARSE_LOCATION?

Я создаю приложение для Android, которое будет отслеживать геолокацию пользователя и рисовать его маршрут на карте.

Я использую API определения местоположения сервисов Google Play, как описано здесь.

Интуитивно понятно, что моему приложению требуется разрешение ACCESS_FINE_LOCATION, которое я поместил в манифест:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Мне также нужно разрешение ACCESS_COARSE_LOCATION? В каком случае мне нужно грубое местоположение?


comment
ACCESS_COARSE_LOCATION включает разрешение только для NETWORK_PROVIDER Не GPS   -  person IntelliJ Amiya    schedule 08.03.2016
comment
@IntelliJAmiya: Я почти уверен, что вы все еще можете использовать GPS_PROVIDER даже с грубым разрешением, но данные будут нечеткими, чтобы внести некоторую неточность в целях конфиденциальности.   -  person CommonsWare    schedule 08.03.2016
comment
@CommonsWare Сэр. Спасибо за Вашу информацию .   -  person IntelliJ Amiya    schedule 08.03.2016
comment
@IntelliJAmiya: На самом деле, возможно, я ошибался. В документации утверждается, что вы можете использовать NETWORK_PROVIDER только с ACCESS_COARSE_LOCATION. Некоторые части кода AOSP также предполагают это, в то время как другие части кода AOSP предполагают, что они подделывают данные, как я думал. Следовательно, на всякий случай лучше предположить, что вы не можете получить местоположения из GPS_PROVIDER, используя только ACCESS_COARSE_LOCATION, хотя это стоит некоторого тестирования.   -  person CommonsWare    schedule 08.03.2016
comment
@IntelliJAmiya: Я только что провел тест, и, по крайней мере, на Android 6.0 вам нужно ACCESS_FINE_LOCATION, чтобы использовать GPS_PROVIDER. В противном случае вы вылетите с SecurityException.   -  person CommonsWare    schedule 09.03.2016


Ответы (5)


Мне также нужно разрешение ACCESS_COARSE_LOCATION?

No.

В каком случае мне нужно грубое местоположение?

Если вы не запрашиваете ACCESS_FINE_LOCATION, но вам нужны данные о местоположении, и вы хотите, чтобы эти данные были нечеткими (скажем, до квартала города от местоположения пользователя). В случае LocationManager вы можете использовать только NETWORK_PROVIDER; в случае поставщика объединенных сервисов Play Services, они должны обрабатывать это внутренне.

Давным-давно во время установки пользователям сообщали, хочет ли приложение грубый или точный доступ к местоположению. Пользователи могут принимать приложения, которым нужен грубый доступ, но отклонять приложения, которым нужен полный доступ.

Поскольку пользовательский интерфейс для этого изменился, и пользователям было бы довольно сложно определить, требуется ли приложению грубое или точное разрешение на определение местоположения, я подозреваю, что большинство разработчиков просто запрашивают разрешение на точное определение местоположения. При этом, если вы знаете, что вашему приложению не требуется такой уровень точности (например, вы хотите указать местоположение для прогноза погоды), запрос разрешения на грубое определение местоположения - это хороший «совет в сторону конфиденциальности» и может оказаться полезным еще раз в будущем.

person CommonsWare    schedule 08.03.2016
comment
Как мы узнаем поставщика местоположения в API-интерфейсе службы Google Play? Это может быть от NETWORK_PROVIDER или GPS_PROVIDER. - person Rohit Bandil; 16.02.2017
comment
@RohitBandil: Вы не знаете, что будет использовать API объединенного местоположения. Вы говорите API объединенного местоположения, что хотите. Он будет решать оттуда. И, AFAIK, если вы держите только ACCESS_COARSE_LOCATION, это даст вам нечеткие результаты. - person CommonsWare; 16.02.2017
comment
@CommonsWare Вы имеете в виду под этим LocationRequest.create (). SetPriority (/ * укажите ваше местоположение). Мы можем указать нашего поставщика местоположения - person Rohit Bandil; 16.02.2017
comment
@RohitBandil: Нет, вы указываете приоритет. Это поможет объединенному API местоположения определить, каких провайдеров использовать. Вы не указываете напрямую провайдера. - person CommonsWare; 16.02.2017
comment
Эти правила остались прежними для Android 11? - person IgorGanapolsky; 18.09.2020
comment
@IgorGanapolsky: Какие правила вы имеете в виду? - person CommonsWare; 18.09.2020
comment
@CommonsWare ACCESS_COARSE_LOCATION разрешение - person IgorGanapolsky; 18.09.2020
comment
@IgorGanapolsky: Я все еще не уверен, о каких правилах вы говорите. AFAIK, все в моем ответе по-прежнему актуально для Android 11. - person CommonsWare; 19.09.2020

Нет, вам не нужно использовать грубое местоположение.

Грубое местоположение соответствует местоположению поставщика сети, а точное местоположение - как поставщику GPS, так и поставщику сетевого местоположения. Такое удобное расположение охватывает и то, и другое, и вам не нужно использовать другой.

Чтобы получать обновления местоположения от NETWORK_PROVIDER или GPS_PROVIDER, вы должны запросить разрешение пользователя, объявив разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION соответственно в файле манифеста Android. Без этих разрешений ваше приложение завершится ошибкой во время выполнения при запросе обновлений местоположения.

Если вы используете как NETWORK_PROVIDER, так и GPS_PROVIDER, вам нужно запросить только разрешение ACCESS_FINE_LOCATION, поскольку оно включает разрешение для обоих поставщиков. Разрешение для ACCESS_COARSE_LOCATION разрешает доступ только к NETWORK_PROVIDER.

Это ссылка для справки.

person Sagar Nayak    schedule 08.03.2016
comment
это настоящий ответ - person vijay; 27.07.2018

Местоположение можно определить двумя способами:

Using NETWORK_PROVIDER
Using GPS_PROVIDER
  1. Используя NETWORK_PROVIDER

    Для использования этого поставщика требуются разрешения Android: ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION.

  2. Используя GPS_PROVIDER

    Для использования этого поставщика требуются только разрешения Android: ACCESS_FINE_LOCATION

person Pinak Gauswami    schedule 04.09.2017

ACCESS_FINE_LOCATION включает ACCESS_COARSE_LOCATION. Однако есть одна загвоздка:

ACCESS_COARSE_LOCATION дает вам последнее известное местоположение, которое удобно для батареи https://developer.android.com/training/location/retrieve-current.html#setup Это зависит от сервисов Google Play.

Однако, если вам нужно что-то вроде местоположения в реальном времени / в реальном времени, используйте ACCESS_FINE_LOCATION. Он дает вам местоположение в реальном времени / в реальном времени. Однако вам нужно будет использовать LocationListener.

person Akhilesh Sinha    schedule 26.02.2020

Проще говоря, ACCESS_FINE_LOCATION дает вам более точное и точное местоположение, а ACCESS_COARSE_LOCATION дает менее точное местоположение.

person Tushar Monirul    schedule 08.01.2020