android 如果已经有ACCESS_FINE_LOCATION,是否可以省略ACCESS_COARSE_LOCATION?

dzhpxtsq  于 2022-12-21  发布在  Android
关注(0)|答案(4)|浏览(349)

我有一个GPS应用,它已经在清单中请求了ACCESS_FINE_LOCATION权限,现在我想添加一个需要ACCESS_COARSE_LOCATION的库(MoPub)。
我假设ACCESS_FINE_LOCATION就足够了,我可以从清单中省略ACCESS_COARSE_LOCATION,这样做对吗?

au9on6nz

au9on6nz1#

https://developer.android.com/guide/topics/location/strategies.html#Permission
注:如果同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它包括两个提供程序的权限。(ACCESS_COARSE_LOCATION的权限只包括NETWORK_PROVIDER的权限。)
简而言之:是的,如果已经定义了ACCESS_FINE_LOCATION,就不需要ACCESS_COARSE_LOCATION

jxct1oxe

jxct1oxe2#

看你的需要了。
权限方面,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服务

lnlaulya

lnlaulya3#

    • 更新**

在Android 12(API级别31)或更高版本上,用户可以请求您的应用仅检索大致位置信息,即使您的应用请求ACCESS_FINE_LOCATION运行时权限也是如此。
要处理这种潜在的用户行为,请不要单独请求ACCESS_FINE_LOCATION权限,而应在单个运行时请求中同时请求ACCESS_FINE_LOCATION权限和ACCESS_COARSE_LOCATION权限。如果您尝试仅请求ACCESS_FINE_LOCATION,系统会在某些Android 12版本上忽略该请求
Check this url: https://developer.android.com/training/location/permissions#approximate-request

fdbelqdn

fdbelqdn4#

差异:
https://developer.android.com/training/location/permissions#accuracyhttps://developer.android.com/training/location/permissions#approximate-request

您需要请求这两种权限。

近似提供设备位置的估计值,误差在大约1英里以内(1.6公里)。当您声明ACCESS_COARSE_LOCATION权限而不声明ACCESS_FINE_LOCATION权限时,您的应用将使用此级别的位置准确度。精确提供尽可能准确的设备位置估计值,通常在约160英尺(50米)内,有时精确到10英尺(几米)或更高。您的应用在声明ACCESS_FINE_LOCATION权限时使用此级别的定位精度。
如果用户赠款近似位置权限,则无论应用声明了哪些位置权限,您的应用都只能访问近似位置。
当用户仅赠款近似位置访问权限时,你的应用应仍能正常工作。如果你的应用中的某个功能绝对需要使用ACCESS_FINE_LOCATION权限访问精确位置,你可以请求用户允许你的应用访问精确位置。

然后在Android 12中更改权限

在Android 12(API级别31)或更高版本上,用户可以请求您的应用仅检索大致位置信息,即使您的应用请求ACCESS_FINE_LOCATION运行时权限也是如此。
要处理这种潜在的用户行为,请不要单独请求ACCESS_FINE_LOCATION权限,而应在一个运行时请求中同时请求ACCESS_FINE_LOCATION权限和ACCESS_COARSE_LOCATION权限。如果您尝试仅请求ACCESS_FINE_LOCATION,系统会在某些Android 12版本上忽略该请求。

相关问题