我正在开发一个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" />
INTERNET
、ACCESS_WIFI_STATE
和CHANGE_WIFI_MULTICAST_STATE
被认为是正常权限,根据文档,它们将在安装时被Android自动接受,并且用户无法撤回。
现在,在Cordova创建的MainActivity
中,我添加了以下代码,位于一个检查我们是否在6.0或更高版本的if
块内:
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和所有其他权限,因为它们是普通权限,不需要经过批准就可以使用。问题在于,即使我已经获得了这些权限,在新设备上我仍然无法执行与这些权限相关的操作,如果我进入应用程序的权限设置,我只能看到Storage权限已被授予,没有INTERNET、ACCESS_WIFI_STATE或CHANGE_WIFI_MULTICAST_STATE权限。我没有专门在6.0设备上进行测试,但我认为我会遇到同样的问题。
为什么权限没有显示在权限设置中,为什么我不能执行需要这些权限的操作,尽管Android说我有权限?