我正在尝试获取具有标记为已授予的REQUEST_INSTALL_PACKAGES
权限的应用列表(在 Android 8.0+ 上)。
context.packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS or PackageManager.GET_META_DATA).forEach { pi ->
if (pi.requestedPermissions != null) {
for (i in pi.requestedPermissions.indices) {
if (pi.requestedPermissions[i] == android.Manifest.permission.REQUEST_INSTALL_PACKAGES) {
if ((pi.requestedPermissionsFlags[i] and PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
// permission is granted, do stuff here
}
}
}
}
}
问题是,相应的 requestedPermissionsFlags
条目总是 1,这意味着 REQUESTED_PERMISSION_REQUIRED
这显然是错误的。
我尝试了不同的 api:context.packageManager.checkPermission(android.Manifest.permission.REQUEST_INSTALL_PACKAGES, pi.packageName) == PackageManager.PERMISSION_GRANTED
结果相同。
我在不同设备上的 Android 8、9 和 10 上进行了尝试,我唯一的成功是在 Pixel 3a 上,它对 com.android.nfc
产生了积极影响。即使我在系统设置中看到 chrome 和其他应用程序已授予此权限,其他人总是错误的。
我是否缺少此 API 的某些内容?是私有(private)的吗?没有太多关于它的信息。
最佳答案
因为此权限具有signature
保护级别。根据documentation :
A permission that the system grants only if the requesting application is signed with the same certificate as the application that declared the permission
所以 requestedPermissionsFlags
是正确的 - 只有 com.android.nfc
被授予。
实际上 REQUEST_INSTALL_PACKAGES
有一个 signature|appop
保护级别,这就是为什么不仅系统应用程序可以使用它,尽管没有为它们授予此权限。有关更多详细信息 - Acquiring Android Permission with Signature Protection Level .
关于android - 如果为其他应用授予 REQUEST_INSTALL_PACKAGES 权限,则无法检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58220135/