0

Пытаясь извлечь все действия для каждого пакета результатов в нулевой ActivityInfo массив для всех из них:ActivityInfo [] является нулем для PackageManager.getInstalledPackages()

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#activities он не должен быть пустым, потому что установлен флаг GET_ACTIVITIES.

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

ответ

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^