如果我已经有ACCESS_FINE_LOCATION,我可以省略ACCESS_COARSE_LOCATION吗?

cha*_*une 81 android geolocation android-permissions

我有一个GPS应用程序已经ACCESS_FINE_LOCATION在清单中请求权限,现在我想添加一个需要的库(MoPub)ACCESS_COARSE_LOCATION.

假设这ACCESS_FINE_LOCATION已经足够我是否正确,我可以ACCESS_COARSE_LOCATION从我的清单中遗漏?

Con*_*son 136

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.

  • +1但奇怪的是,Google地图文档建议同时使用这两者:https://developers.google.com/maps/documentation/android/start?hl = fr#specs_app_settings_in_the_application_manifest (12认同)
  • 更新@ alex的评论:Google地图现在明确表示您只需要申请一个权限.https://developers.google.com/maps/documentation/android-api/location (5认同)
  • 也许对于具有网络功能但没有GPS的手机? (3认同)
  • @NicklasA.从逻辑上讲,这不应该影响"罚款"包括"粗略"的事实 - 缺少的提供者将会丢失.此外,如果这种情况需要,那么我希望Google文档这么说. (2认同)

eri*_*icn 10

取决于你的需要.

许可明智,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服务


هيث*_*يثم 7

更新

在 Android 12(API 级别 31)或更高版本上,用户可以请求您的应用仅检索大致位置信息,即使您的应用请求 ACCESS_FINE_LOCATION 运行时权限也是如此。

要处理这种潜在的用户行为,请勿单独请求 ACCESS_FINE_LOCATION 权限。相反,请在单个运行时请求中同时请求 ACCESS_FINE_LOCATION 权限和 ACCESS_COARSE_LOCATION 权限。如果您尝试仅请求 ACCESS_FINE_LOCATION,系统会在 Android 12 的某些版本上忽略该请求

检查此网址:https ://developer.android.com/training/location/permissions#approximate-request