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

问题描述 投票:0回答:2

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

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

我正在运行时验证权限,

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED

对于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版本之间的权限级别/严重性如何变化。

请帮我了解一下。

android android-manifest android-permissions android-location
2个回答
3
投票

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

如果您的应用的目标SDK为22或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予权限;如果他们不授予权限,系统根本不会安装应用程序。 如果您的应用的目标SDK是23或更高:应用必须列出清单中的权限,并且它必须在应用运行时请求它所需的每个危险权限。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用程序也可以继续以有限的功能运行。 你可以参考这个Link


1
投票

试一试。

 private boolean RequestPermissions() {

    int camera = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA);
    int storage = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
    List<String> listPermissionsNeeded = new ArrayList<>();
    if (camera != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(CAMERA);
    }
    if (storage != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(WRITE_EXTERNAL_STORAGE);
        listPermissionsNeeded.add(READ_EXTERNAL_STORAGE);

    }
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
        return false;
    }

    return true;
}

这是检查是否需要权限的功能,如果它们不可用,它将向用户询问。

© www.soinside.com 2019 - 2024. All rights reserved.