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

When should I use ACCESS_COARSE_LOCATION permission?

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

我正在使用 Google 播放服务位置 API,如 here 所述。

很直观,我的应用程序需要 ACCESS_FINE_LOCATION 权限,我把它放在清单中:

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

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

Do I also need the ACCESS_COARSE_LOCATION permission?

没有

What's the use case where I need the coarse location?

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

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

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

更新 2021-11-16:Android 12 更改 UI 如果您要求 ACCESS_FINE_LOCATIONThe user now has the option of downgrading you to only getting ACCESS_COARSE_LOCATION access,选择“近似”而不是“精确”。

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

粗略定位是针对网络提供商的位置,精细定位是针对 GPS 提供商和网络定位提供商。这么好的位置涵盖了两者,你不需要使用另一个。

In order to receive location updates from NETWORK_PROVIDER or GPS_PROVIDER, you must request the user's permission by declaring either the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission, respectively, in your Android manifest file. Without these permissions, your application will fail at runtime when requesting location updates.

If you are using both NETWORK_PROVIDER and GPS_PROVIDER, then you need to request only the ACCESS_FINE_LOCATION permission, because it includes permission for both providers. Permission for ACCESS_COARSE_LOCATION allows access only to NETWORK_PROVIDER.

This是一个link供大家参考。

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

Using NETWORK_PROVIDER
Using GPS_PROVIDER
  1. 使用NETWORK_PROVIDER

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

  2. 使用GPS_PROVIDER

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

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

ACCESS_FINE_LOCATION 包括 ACCESS_COARSE_LOCATION。但是,有一个问题:

ACCESS_COARSE_LOCATION 为您提供电池友好的最后已知位置 https://developer.android.com/training/location/retrieve-current.html#setup 这依赖于 Google 播放服务

但是,如果您需要实时/实时位置之类的东西,请使用 ACCESS_FINE_LOCATION 它为您提供实时/实时位置。不过,您需要使用 LocationListener。