86

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

我正在使用 Google Play Services 位置 API,如此处所述

很直观,我的应用程序需要ACCESS_FINE_LOCATION权限,我将其放入清单中:

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

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

4

5 回答 5

102

我还需要 ACCESS_COARSE_LOCATION 权限吗?

不。

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

如果您不要求ACCESS_FINE_LOCATION,但您需要位置数据,并且您愿意该数据是模糊的(例如,从用户位置到大约一个城市街区)。在 的情况下LocationManager,您只能使用NETWORK_PROVIDER; 对于 Play Services 融合位置提供商,他们应该在内部处理这个问题。

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

由于 UI 发生了变化,用户在确定应用程序是否需要粗略或精细的位置权限时会有相当大的困难,我怀疑大多数开发人员只是要求精细的位置权限。话虽如此,如果您知道您的应用程序不需要那种级别的准确性(例如,您想要天气预报的位置),那么在隐私和将来可能再次证明是有益的。

更新 2021-11-16:如果您要求,Android 12 会更改 UI ACCESS_FINE_LOCATION用户现在可以ACCESS_COARSE_LOCATION通过选择“近似”而不是“精确”来将您降级为仅获得访问权限。

于 2016-03-08T14:13:35.850 回答
38

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

粗略定位用于网络提供商的位置,精细定位用于 GPS 提供商和网络定位提供商。如此好的位置涵盖了两者,您不需要使用另一个。

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

如果您同时使用 NETWORK_PROVIDER 和 GPS_PROVIDER,那么您只需要请求 ACCESS_FINE_LOCATION 权限,因为它包括两个提供者的权限。ACCESS_COARSE_LOCATION 的权限只允许访问 NETWORK_PROVIDER。

是供您参考的链接。

于 2016-03-08T14:14:43.680 回答
21

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

Using NETWORK_PROVIDER
Using GPS_PROVIDER
  1. 使用NETWORK_PROVIDER

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

  2. 使用GPS_PROVIDER

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

于 2017-09-04T07:13:26.397 回答
3

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 。

于 2020-02-26T05:26:25.973 回答
0

简而言之ACCESS_FINE_LOCATION,为您提供更好和准确的位置,并ACCESS_COARSE_LOCATION为您提供不太准确的位置。

于 2020-01-08T06:30:43.113 回答