Невозможно получить, если разрешение REQUEST_INSTALL_PACKAGES предоставлено для других приложений - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь получить список приложений (на 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? Это личное? Там не так много, чтобы найти об этом.

1 Ответ

1 голос
/ 03 октября 2019

Поскольку это разрешение имеет уровень защиты signature. Согласно документации :

Разрешение, которое система предоставляет, только если запрашивающее приложение подписано тем же сертификатом, что и приложение, которое объявило разрешение

То есть requestedPermissionsFlags правильно - предоставляется только com.android.nfc.

На самом деле REQUEST_INSTALL_PACKAGES имеет уровень защиты signature|appop, поэтому его могут использовать не только системные приложения, хотя это разрешение не предоставляется дляих. Чуть подробнее - Получение разрешения Android с уровнем защиты подписи .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...