Я пытаюсь получить список приложений (на Android 8.0+) с разрешениями REQUEST_INSTALL_PACKAGES
, помеченными как предоставлено .
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? Это личное? Там не так много, чтобы найти об этом.