PackageManager генерирует исключение NameNotFoundException для всех приложений, даже для моего собственного приложения

Я загружаю все приложения с Android, а затем отображаю их в моем лаунчере (значок + имя). Код выглядит следующим образом:

public class PhoneAppItem
{
    String mPackageName = null;
    String mActivityName = null;

    String mName = null;
    ActivityInfo mActivityInfo = null;

    public PhoneAppItem(String packageName, String activityName)
    {
        mPackageName = packageName;
        mActivityName = activityName;
    }

    public void loadInfo()
    {
        PackageManager pm = MainApp.get().getPackageManager();
        try
        {
            // following line throws the exception!
            mActivityInfo = pm.getActivityInfo(new ComponentName(mPackageName, mActivityName), 0);
            // some other code...
        }
        catch (PackageManager.NameNotFoundException e)
        {
            L.e(e);
            mName = mPackageName;
        }
        catch (NullPointerException e)
        {
            L.e(e);
            mName = mPackageName;
        }
    }   
}

Имена пакетов и имена действий для всех моих PhoneAppItem элементы извлекаются следующим образом (для Android < 5, что относится к единственному, пока известному устройству, имеющему эту проблему):

List<PhoneAppItem> apps = new ArrayList<>();
ActivityManager activityManager = (ActivityManager) MainApp.get().getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processInfos = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfos)
{
    try
    {
        ApplicationInfo ai = pm.getApplicationInfo(processInfo.processName, 0);
        if (!excludedPackages.contains(ai.packageName))
            apps.add(new PhoneAppItem(ai.packageName, ai.className));
    }
    catch (PackageManager.NameNotFoundException e) {}
}

Теперь у меня есть пользователь, который получает следующее исключение:

android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{com.package.myapp/com.package.myapp.app.MainApp}
    at android.app.ApplicationPackageManager.getActivityInfo(ApplicationPackageManager.java:262)
    at com.package.myap.classes.PhoneAppItem.h(PhoneAppItem.java:70)
    ...

наблюдения

  • исключение выше выдается для всех приложений, даже для моего собственного приложения
  • до сих пор это поведение было уникальным для одного пользователя, использующего следующее оборудование: Lenovo Yoga Tablet HD+ (b8080), Android 4.4.2

Вопрос

У кого-нибудь есть идея, почему это может произойти?

1 ответ

Если processInfo.processName не работает, попробуйте другой способ получения пакета:

processInfo.pkgList[0]
Другие вопросы по тегам