我正在开发需要权限的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说我有权限,我也不能执行需要这些权限的操作?