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

问题描述 投票:0回答:4

我有一个 GPS 应用程序已在清单中请求

ACCESS_FINE_LOCATION
权限,现在我想添加一个需要
ACCESS_COARSE_LOCATION
的库 (MoPub)。

我是否正确地假设

ACCESS_FINE_LOCATION
就足够了,并且我可以从我的清单中省略
ACCESS_COARSE_LOCATION

android geolocation android-permissions
4个回答
176
投票

安卓12+

https://developer.android.com/develop/sensors-and-location/location/permissions#approximate-request

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

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

两者都需要。作为最终用户只能授予近似访问权限。因此,如果您只有

ACCESS_FINE_LOCATION
- 您将不会获得任何权限批准。所以现在需要
ACCESS_COARSE_LOCATION
ACCESS_FINE_LOCATION

Android 12 之前

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


22
投票

取决于您的需求。

许可方面,

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


1
投票

差异:

https://developer.android.com/training/location/permissions#accuracy https://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.

© www.soinside.com 2019 - 2024. All rights reserved.