请求权限设置中未显示请求的Android权限

时间:2018-04-04 17:56:04

标签: android cordova android-permissions

我正在使用需要权限INTERNETWRITE_EXTERNAL_STORAGEACCESS_WIFI_STATECHANGE_WIFI_MULTICAST_STATE的Cordova应用。我已经在清单中请求了这些权限,如此

<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" />

INTERNETACCESS_WIFI_STATECHANGE_WIFI_MULTICAST_STATE被视为正常权限,根据docs,Android会在安装时自动接受这些权限,而用户则不能撤销它们。

现在,在Cordova创建的MainActivity中,我将此代码添加到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_EXTERNAL_STORAGE和所有其他权限,因为它们是正常的,不会被要求批准。它们会自动获得批准。问题是即使我有权限,在较新的设备上我也无法做与这些权限相关的事情,如果我转到应用程序设置获取权限,我看到的是权限存储已授予。 INTERNETACCESS_WIFI_STATECHANGE_WIFI_MULTICAST_STATE无效。我没有在6.0设备上专门测试过,但我想我会遇到同样的问题。

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

1 个答案:

答案 0 :(得分:3)

您链接的documentation包含以下声明:

&#34;系统不会提示用户授予正常权限,用户也无法撤消这些权限。 &#34;

因此,将始终授予除WRITE_EXTERNAL_STORAGE以外的所有权限。您要求的唯一权限是可以撤销的权限。

  

为什么权限未显示在权限设置

嗯,根据Android版本,他们可能有点难找。例如,在运行Android 7.0的模拟器上,我找到了Apps下所有权限的列表 - &gt; MyApp - &gt;权限,然后单击&#34;所有权限&#34;在溢出菜单中。

enter image description here