代码之家  ›  专栏  ›  技术社区  ›  Jason Crosby

请求的Android权限未显示应用内权限设置

  •  4
  • Jason Crosby  · 技术社区  · 6 年前

    我正在开发需要权限的Cordova应用程序 INTERNET ,则, WRITE_EXTERNAL_STORAGE ,则, ACCESS_WIFI_STATE CHANGE_WIFI_MULTICAST_STATE 。我在清单中请求了这些权限

    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    

    互联网 ,则, ACCESS\u WIFI\u状态 更改\u WIFI\u MULTICAST\u状态 被视为正常权限,并根据 docs 它们将在安装时被Android自动接受,用户无法撤销它们。

    现在在 MainActivity 由Cordova创建,我在 if 阻止检查以确保我们处于6.0或更高版本:

    if (checkSelfPermission(Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED &&
                    checkSelfPermission(Manifest.permission.CHANGE_WIFI_MULTICAST_STATE) == PackageManager.PERMISSION_GRANTED &&
                    checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                Log.d(TAG, "has permission");
            }
            else {
                Log.d(TAG, "no permission");
                requestPermissions(new String[] { Manifest.permission.ACCESS_WIFI_STATE,
                        Manifest.permission.CHANGE_WIFI_MULTICAST_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
            }
    

    问题是,在运行5.1.1的Android设备上,这是可行的,当我转到应用程序的权限设置时,我看到了所有4个权限。但是,在运行7.0和7.1.1的设备上,我收到一个对话框,要求批准 WRITE\u EXTERNAL\u存储 和所有其他权限,因为它们是正常的,不会被要求批准。它们是自动批准的。问题是,尽管我有权限,但在较新的设备上,我无法执行与这些权限相关的操作,如果我转到应用程序设置获取权限,我看到的只是授予的权限存储。不适用于 互联网 ,则, ACCESS\u WIFI\u状态 更改\u WIFI\u MULTICAST\u状态 。我没有专门在6.0设备上进行测试,但我想我也会遇到同样的问题。

    为什么权限设置中没有显示权限,为什么即使Android说我有权限,我也不能执行需要这些权限的操作?

    1 回复  |  直到 4 年前
        1
  •  5
  •   Bö macht Blau    6 年前

    这个 documentation 您链接到的包含以下语句:

    系统不会提示用户授予正常权限,用户无法撤消这些权限

    因此,除了 WRITE_EXTERNAL_STORAGE 将始终被授予。您唯一需要请求的权限是可以撤销的权限。

    为什么权限设置中不显示权限

    嗯,根据android版本的不同,它们可能有点难以找到。例如,在运行android 7.0的模拟器上,我找到了应用程序下所有权限的列表->MyApp->权限,然后单击溢出菜单中的“所有权限”。

    enter image description here