sdk 22和25之间的ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限有什么区别吗?

rm *_*tar 1 android android-manifest android-location android-permissions

我试图通过在 AndroidManifest.xml 中声明来从 GPS 或使用这些权限的网络提供商获取当前位置,

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

我在运行时验证权限,

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
Run Code Online (Sandbox Code Playgroud)

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)

对于 Android SDK 版本 22,它工作得很好,而在 SDK 版本 25 中,尽管在 AndroidManifest.xml 中声明了权限,但它在运行时并未得到反映。

我检查了这些权限是否被授予,

adb shell dumpsys 包 com.abc.xyz

当我尝试使用 adb shell 授予权限时,在 SDK-25 上运行的应用程序未授予权限,如下所示:

adb shell pm grant com.abc.xyz android.Manifest.permission.ACCESS_COARSE_LOCATION

我怀疑 Android 从 SDK 版本 25 开始授予这些权限(如果我错了,请纠正我)。仅通过谷歌搜索,我无法弄清楚 SDK 版本之间的权限级别/严重性如何变化。

请帮我了解一下。

abh*_*rma 5

在所有版本的 Android 上,您的应用程序需要在其应用程序清单中声明所需的正常权限和危险权限,如声明权限中所述。但是,该声明的效果会根据系统版本和应用程序的目标 SDK 级别而有所不同:

如果您应用的目标 SDK 为 22 或更低:如果您在清单中列出了危险权限,则用户在安装应用时必须授予该权限;如果他们不授予权限,系统根本不会安装该应用程序。

如果您的应用程序的目标 SDK 为 23 或更高:应用程序必须在清单中列出权限,并且必须在应用程序运行时请求所需的每个危险权限。用户可以授予或拒绝每项权限,即使用户拒绝权限请求,应用程序也可以继续以有限的功能运行。

你可以参考这个链接