棉花糖FINE和COARSE位置权限

18
我正在尝试访问ACCESS_FINE_LOCATION,如果找不到,则访问ACCESS_COARSE_LOCATION。因此,我请求这两个权限,但它们都给我同一个对话框要求位置权限。我知道它们都在同一组中,但谷歌说: 注意:即使用户已经授予同一组中的另一个权限,您的应用程序仍然需要明确请求其需要的每个权限。此外,权限分组可能会在未来的Android版本中更改。您的代码不应该依赖于特定权限是否在同一组中或不在同一组中的假设。
这意味着我在一秒钟内请求了这两个权限,导致连续出现2个对话框。这对用户来说似乎不太友好。有更好的方法吗?

1
我目前也在思考同样的问题。ACCESS_FINE_LOCATION 是否已经包含了 ACCESS_COARSE_LOCATION?例如,如果你可以获取精确位置,那么应该也能够获取大致位置吧? - Nikola
你是使用网络提供商获取位置还是仅使用GPS? - Rajesh Jadav
试一下这个,可能会起作用 https://dev59.com/J1wX5IYBdhLWcg3w-Thv#41221852 - Bipin Bharti
2个回答

34

在定义ACCESS_FINE_LOCATION权限时,您不需要使用ACCESS_COARSE_LOCATION权限。

来自Android文档:

请求用户权限

为了从NETWORK_PROVIDERGPS_PROVIDER接收位置更新,您必须在Android清单文件中声明ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限。例如:

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

没有这些权限,当请求位置更新时,您的应用程序将在运行时失败。

注意: 如果您同时使用NETWORK_PROVIDERGPS_PROVIDER,那么您只需要请求ACCESS_FINE_LOCATION权限,因为它包含了两种提供程序的权限(ACCESS_COARSE_LOCATION权限仅包括NETWORK_PROVIDER的权限)。

请查看https://developer.android.com/guide/topics/location/strategies.html


-2

我已经解决了同样的问题。尝试给予运行时权限,首先检查清单SDK版本,如果您的版本大于6.0或等于6.0,则需要检查您的权限并仅在请求位置时传递Fine location权限,那么它肯定会起作用。

如果您在代码中遇到困难,可以向我询问代码,我会更新您,但首先请按照这些步骤进行操作。 如果您成功执行任务,则请评价它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接