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
список будет нулевым или пустым