Marshmallow FINE和COARSE位置许可

时间:2015-11-18 12:39:13

标签: android android-permissions android-6.0-marshmallow

我正在尝试访问ACCESS_FINE_LOCATION,如果找不到,请访问ACCESS_COARSE_LOCATION。所以我要求获得这2个权限,但是他们给了我相同的对话框,要求获得位置许可。我知道这些人都属于同一组,但谷歌说:

  

注意:您的应用仍需要明确请求其所需的每个权限,即使用户已在同一组中授予了其他权限。此外,将权限分组到组中可能会在将来的Android版本中发生变化。您的代码不应该依赖于特定权限属于或不属于同一组的假设。

这意味着我要求在一秒内获得这2个权限,这会导致连续2个对话框。这对我来说似乎不太友好。还有更好的方法吗?

2 个答案:

答案 0 :(得分:30)

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

来自Android文档:

  

申请用户权限

     

要从NETWORK_PROVIDER或来自GPS_PROVIDER接收位置更新   ACCESS_COARSE_LOCATION,您必须通过声明其中来请求用户权限   ACCESS_FINE_LOCATION<manifest> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ....... </manifest> 权限,   分别在你的Android清单文件中。例如:

NETWORK_PROVIDER
     

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

     

注意:如果您同时使用GPS_PROVIDERACCESS_FINE_LOCATION,那么   您只需要ACCESS_COARSE_LOCATION权限,因为   它包括两个提供商的许可。 (许可   NETWORK_PROVIDER仅包含{{1}}的权限。)

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

答案 1 :(得分:-1)

我已经解决了同样的问题。尝试给它运行时权限并首先检查清单SDK版本,如果你的版本大于6.0或等于6.0,那么你需要检查你的权限和通过权限的权限仅限精确位置在请求位置,然后肯定会工作。

如果您遇到代码,那么您可能会要求代码我会更新您,但首先要完成这些步骤。 如果你成功完成任务,那就给它评分。