Если у меня уже есть ACCESS_FINE_LOCATION, могу ли я пропустить ACCESS_COARSE_LOCATION?

89

У меня есть приложение GPS, которое уже запрашивает ACCESS_FINE_LOCATIONразрешение в манифесте, теперь я хочу добавить библиотеку (MoPub), которая требует ACCESS_COARSE_LOCATION.

Правильно ли я предполагаю, что этого ACCESS_FINE_LOCATIONдостаточно, и я могу не указывать в ACCESS_COARSE_LOCATIONсвоем манифесте?

Чарли Фортуна
источник

Ответы:

153

https://developer.android.com/guide/topics/location/strategies.html#Permission

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

Короче: да, вам не нужно, ACCESS_COARSE_LOCATIONесли вы уже определились ACCESS_FINE_LOCATION.

Коннор Тамблсон
источник
13
+1, но, как ни странно, документ Google Maps рекомендует использовать оба: developers.google.com/maps/documentation/android/…
Alex
3
Возможно, для телефонов, у которых есть сетевые возможности, но нет GPS?
Никлас А.
2
@NicklasA. по логике, это не должно влиять на то, что «штраф» включает в себя «грубый» - отсутствующий провайдер будет просто отсутствовать. Кроме того, если бы это было необходимо в этом случае, я бы ожидал, что это будет сказано в документации Google.
ToolmakerSteve,
9
Обновление комментария @ alex: теперь в Google Maps прямо указано, что вам нужно запросить только одно разрешение. developers.google.com/maps/documentation/android-api/location
Klox,
15

Зависит от ваших потребностей.

Мудрое разрешение, ACCESS_FINE_LOCATIONвключает ACCESS_COARSE_LOCATION. Однако есть загвоздка:

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

Однако, если вам нужно что-то вроде местоположения в реальном времени / в реальном времени, например Pokemon Go, используйте ACCESS_FINE_LOCATION
его, чтобы получить местоположение в реальном времени / в реальном времени. Вам нужно будет использовать LocationListener
последний раз, когда я проверял, для этого не требуются сервисы Google Play

Эрикн
источник
Будет ли это разрешение полезно для сканирования Bluetooth LE?
Игорь Ганапольский 03
@ericn, может, ты поможешь мне решить проблему с местоположением? stackoverflow.com/questions/63917764/… У меня очень странное поведение при прослушивании предложений NMEA.
Виктор Апоян