我正在构建一个Android应用程序,该应用程序将跟踪用户的地理位置并在地图上绘制其路线。
我使用的是谷歌播放服务的位置API,如所描述这里。
很明显,我的应用程序需要ACCESS_FINE_LOCATION
许可,我将其放入清单中:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
我还需要ACCESS_COARSE_LOCATION
许可吗?我需要粗略位置的用例是什么?
我正在构建一个Android应用程序,该应用程序将跟踪用户的地理位置并在地图上绘制其路线。
我使用的是谷歌播放服务的位置API,如所描述这里。
很明显,我的应用程序需要ACCESS_FINE_LOCATION
许可,我将其放入清单中:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
我还需要ACCESS_COARSE_LOCATION
许可吗?我需要粗略位置的用例是什么?
GPS_PROVIDER
即使经过粗略的允许,您仍然可以使用甚至,但是为了保护隐私,数据将变得模糊不清,以引入一种不准确的措施。
NETWORK_PROVIDER
与一起使用ACCESS_COARSE_LOCATION
。某些AOSP代码也暗示了这一点,而AOSP代码的其他部分则暗示了它们像我认为的那样“捏造”了数据。因此,为了安全起见,最好假设您无法GPS_PROVIDER
仅ACCESS_COARSE_LOCATION
通过来获取位置,尽管值得进行一些测试。
ACCESS_FINE_LOCATION
使用GPS_PROVIDER
。SecurityException
否则,您将崩溃。
Answers:
我还需要ACCESS_COARSE_LOCATION权限吗?
没有。
我需要粗略位置的用例是什么?
如果您不要求ACCESS_FINE_LOCATION
,但您需要位置数据,并且愿意将该数据变得模糊(例如,距离用户位置不远的城市街区)。在的情况下LocationManager
,您只能使用NETWORK_PROVIDER
; 如果是Play Services融合的位置提供程序,则应在内部进行处理。
很久很久以前,在安装时就告知用户该应用程序是要粗略定位还是精细定位。用户可能会接受需要粗略访问的应用程序,但会拒绝想要精细访问的应用程序。
由于用户界面已更改,并且用户在确定应用程序需要粗略定位还是精细定位方面会遇到很多困难,我怀疑大多数开发人员都只是在寻求精细定位权限。话虽这么说,如果您知道您的应用不需要那种准确性(例如,您想要天气预报的位置),那么在隐私权和隐私方面,要求粗略的位置许可是一个不错的“提示”。将来可能再次证明是有益的。
ACCESS_COARSE_LOCATION
,它将为您提供“模糊”结果。
不,您不需要使用粗略位置。
粗略位置用于网络提供商的位置,而精细位置用于GPS提供商和网络位置提供商。因此,良好的地理位置可同时覆盖这两个方面,您无需使用其他花药。
为了从NETWORK_PROVIDER或GPS_PROVIDER接收位置更新,您必须通过在Android清单文件中分别声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来请求用户的权限。没有这些权限,您的应用程序将在请求位置更新时在运行时失败。
如果同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它同时包含两个提供程序的权限。ACCESS_COARSE_LOCATION的权限仅允许访问NETWORK_PROVIDER。
这是供您参考的链接。
ACCESS_FINE_LOCATION包括ACCESS_COARSE_LOCATION。但是,有一个陷阱:
ACCESS_COARSE_LOCATION为您 提供了对电池友好的最新已知位置https://developer.android.com/training/location/retrieve-current.html#setup这取决于Google Play服务
但是,如果您需要实时/实时位置信息,请使用ACCESS_FINE_LOCATION它为您提供实时/实时位置信息。但是,您将需要使用LocationListener。
简而言之ACCESS_FINE_LOCATION
,您将获得更好,更准确的位置,而您获得的位置ACCESS_COARSE_LOCATION
将不那么准确。
ACCESS_COARSE_LOCATION
包括只许可NETWORK_PROVIDER
不GPS