我什么时候应该使用ACCESS_COARSE_LOCATION权限?


77

我正在构建一个Android应用程序,该应用程序将跟踪用户的地理位置并在地图上绘制其路线。

我使用的是谷歌播放服务的位置API,如所描述这里

很明显,我的应用程序需要ACCESS_FINE_LOCATION许可,我将其放入清单中:

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

我还需要ACCESS_COARSE_LOCATION许可吗?我需要粗略位置的用例是什么?


ACCESS_COARSE_LOCATION包括只许可NETWORK_PROVIDERGPS
的IntelliJ阿米亚·

1
@IntelliJAmiya:我敢肯定,GPS_PROVIDER即使经过粗略的允许,您仍然可以使用甚至,但是为了保护隐私,数据将变得模糊不清,以引入一种不准确的措施。
CommonsWare,2016年

@CommonsWare先生。感谢你的信息 。
IntelliJ Amiya

2
@IntelliJAmiya:其实,我可能误会了。文档声称您只能NETWORK_PROVIDER与一起使用ACCESS_COARSE_LOCATION。某些AOSP代码也暗示了这一点,而AOSP代码的其他部分则暗示了它们像我认为的那样“捏造”了数据。因此,为了安全起见,最好假设您无法GPS_PROVIDERACCESS_COARSE_LOCATION通过来获取位置,尽管值得进行一些测试。
CommonsWare,2016年

4
@IntelliJAmiya:我刚刚进行了测试,至少在Android 6.0上,您需要ACCESS_FINE_LOCATION使用GPS_PROVIDERSecurityException否则,您将崩溃。
CommonsWare 2013年

Answers:


87

我还需要ACCESS_COARSE_LOCATION权限吗?

没有。

我需要粗略位置的用例是什么?

如果您不要求ACCESS_FINE_LOCATION,但您需要位置数据,并且愿意将该数据变得模糊(例如,距离用户位置不远的城市街区)。在的情况下LocationManager,您只能使用NETWORK_PROVIDER; 如果是Play Services融合的位置提供程序,则应在内部进行处理。

很久很久以前,在安装时就告知用户该应用程序是要粗略定位还是精细定位。用户可能会接受需要粗略访问的应用程序,但会拒绝想要精细访问的应用程序。

由于用户界面已更改,并且用户在确定应用程序需要粗略定位还是精细定位方面会遇到很多困难,我怀疑大多数开发人员都只是在寻求精细定位权限。话虽这么说,如果您知道您的应用不需要那种准确性(例如,您想要天气预报的位置),那么在隐私权和隐私方面,要求粗略的位置许可是一个不错的“提示”。将来可能再次证明是有益的。


我们怎么知道Google Play服务融合api中的位置提供者?它可能来自NETWORK_PROVIDER或GPS_PROVIDER。
罗希特·班迪尔

@RohitBandil:您不知道融合位置API将使用什么。您告诉融合的位置API您想要什么。它将从那里决定。而且,AFAIK,如果仅按住ACCESS_COARSE_LOCATION,它将为您提供“模糊”结果。
CommonsWare

@CommonsWare您的意思是这个LocationRequest.create()。setPriority(/ *指定您的位置提供者。我们可以指定我们的位置提供者
Rohit Bandil

@RohitBandil:不,您指定优先级。这将有助于融合的位置API确定要使用的提供程序。您没有直接指定提供者。
CommonsWare

1
@IgorGanapolsky:嗯,我仍然不确定您指的是什么规则。AFAIK,我回答的所有内容仍适用于
Android11。– CommonsWare

34

不,您不需要使用粗略位置。

粗略位置用于网络提供商的位置,而精细位置用于GPS提供商和网络位置提供商。因此,良好的地理位置可同时覆盖这两个方面,您无需使用其他花药。

为了从NETWORK_PROVIDER或GPS_PROVIDER接收位置更新,您必须通过在Android清单文件中分别声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来请求用户的权限。没有这些权限,您的应用程序将在请求位置更新时在运行时失败。

如果同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它同时包含两个提供程序的权限。ACCESS_COARSE_LOCATION的权限仅允许访问NETWORK_PROVIDER。

是供您参考的链接。


4
这是实际的答案
vijay

20

位置可以通过两种方式确定:

Using NETWORK_PROVIDER
Using GPS_PROVIDER
  1. 使用NETWORK_PROVIDER

    使用此提供程序所需的Android权限为 ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION

  2. 使用GPS_PROVIDER

    使用此提供程序所需的Android权限仅为 ACCESS_FINE_LOCATION



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.