请求的 Android 权限未显示在应用权限设置中
Requested Android permissions not showing in app permission settings
我正在开发需要权限 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);
}
问题是,在 Android 设备上 运行 5.1.1 这有效,当我转到应用程序的权限设置时,我看到了所有 4 个权限。但是在 运行 7.0 和 7.1.1 设备上,我收到一个对话框,要求批准 WRITE_EXTERNAL_STORAGE
和所有其他权限,因为它们是正常的,所以不会被要求批准。它们会自动获得批准。问题是,即使我有权限,在较新的设备上我也无法执行与这些权限相关的操作,如果我转到应用程序设置以获得权限,我看到的只是授予存储权限。 INTERNET
、ACCESS_WIFI_STATE
或 CHANGE_WIFI_MULTICAST_STATE
没有任何内容。我没有在 6.0 设备上专门测试过,但我想我也会遇到同样的问题。
为什么权限设置中没有显示权限,为什么我不能执行需要这些权限的操作,即使 Android 说我有权限?
您链接到的 documentation 包含以下语句:
"The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions. "
因此,除了 WRITE_EXTERNAL_STORAGE
之外的所有权限都将始终被授予。您唯一需要申请的许可是可以撤销的许可。
Why are the permissions not showing in the permission settings
好吧,根据 android 版本,它们可能有点难找。例如在我的模拟器 运行 android 7.0 上,我在 Apps -> MyApp -> Permissions 下找到了所有权限的列表,然后在溢出菜单中单击 "All permissions"。
我正在开发需要权限 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);
}
问题是,在 Android 设备上 运行 5.1.1 这有效,当我转到应用程序的权限设置时,我看到了所有 4 个权限。但是在 运行 7.0 和 7.1.1 设备上,我收到一个对话框,要求批准 WRITE_EXTERNAL_STORAGE
和所有其他权限,因为它们是正常的,所以不会被要求批准。它们会自动获得批准。问题是,即使我有权限,在较新的设备上我也无法执行与这些权限相关的操作,如果我转到应用程序设置以获得权限,我看到的只是授予存储权限。 INTERNET
、ACCESS_WIFI_STATE
或 CHANGE_WIFI_MULTICAST_STATE
没有任何内容。我没有在 6.0 设备上专门测试过,但我想我也会遇到同样的问题。
为什么权限设置中没有显示权限,为什么我不能执行需要这些权限的操作,即使 Android 说我有权限?
您链接到的 documentation 包含以下语句:
"The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions. "
因此,除了 WRITE_EXTERNAL_STORAGE
之外的所有权限都将始终被授予。您唯一需要申请的许可是可以撤销的许可。
Why are the permissions not showing in the permission settings
好吧,根据 android 版本,它们可能有点难找。例如在我的模拟器 运行 android 7.0 上,我在 Apps -> MyApp -> Permissions 下找到了所有权限的列表,然后在溢出菜单中单击 "All permissions"。