我正在使用需要权限INTERNET,WRITE_EXTERNAL_STORAGE,ACCESS_WIFI_STATE和CHANGE_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" />
INTERNET,ACCESS_WIFI_STATE和CHANGE_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和所有其他权限,因为它们是正常的,因此不会被要求批准.它们会自动获得批准.问题是,即使我拥有权限,在较新的设备上我也无法执行与这些权限相关的操作,并且如果我转到应用程序设置权限,我所看到的就是授予的权限存储. INTERNET,ACCESS_WIFI_STATE或CHANGE_WIFI_MULTICAST_STATE都没有.我尚未在6.0设备上进行专门测试,但我想我会遇到同样的问题.
为什么权限没有显示在权限设置中,为什么即使Android表示我具有权限,我也无法执行需要这些权限的操作?
解决方法:
链接到的documentation包含以下语句:
“系统不会提示用户授予普通权限,并且用户无法撤消这些权限.”
因此,将始终授予除WRITE_EXTERNAL_STORAGE之外的所有权限.您唯一需要的许可就是可以撤销的许可.
Why are the permissions not showing in the permission settings
好吧,取决于Android版本,可能会很难找到它们.例如,在运行android 7.0的模拟器上,我在Apps->下找到了所有权限的列表. MyApp->单击权限,然后在溢出菜单中单击“所有权限”.