ActivityInfo[] является нулевым для PackageManager.getInstalledPackages()

Попытка получить все действия для каждого пакета приводит к пустому массиву ActivityInfo для всех них:

List<PackageInfo> packageInfos = mPackageManager.getInstalledPackages(
                PackageManager.GET_ACTIVITIES &
                PackageManager.GET_SERVICES &
                PackageManager.GET_RECEIVERS &
                PackageManager.GET_PROVIDERS &
                PackageManager.GET_PERMISSIONS);

for (PackageInfo p : packageInfos) 
    Log.wtf(TAG, p.packageName + ": " + (p.activities == null ? "null" :"not null"));

p.activities для всех пакетов - ноль. Согласно https://developer.android.com/reference/android/content/pm/PackageInfo.html он не должен быть нулевым, поскольку установлен флаг GET_ACTIVITIES.

Где проблема тогда?

1 ответ

Решение

Мой плохой, я перепутал с побитовыми операторами. Должен был использовать оператор ИЛИ (|) вместо одного И (&), как это:

List<PackageInfo> packageInfos = mPackageManager.getInstalledPackages(
                PackageManager.GET_ACTIVITIES |
                PackageManager.GET_SERVICES |
                PackageManager.GET_RECEIVERS |
                PackageManager.GET_PROVIDERS |
                PackageManager.GET_PERMISSIONS);

Тем не менее, этот вызов приводит к TransactionTooLargeException из-за ограничения размера данных, изменяемого между различными процессами в Android, поэтому большинство пробалов вернулось packageInfos список будет нулевым или пустым

Другие вопросы по тегам