android - PackageManager 为所有应用程序抛出 NameNotFoundException,甚至是我自己的应用程序

标签 android android-package-managers

我正在从 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 项目的包名称和 Activity 名称都按如下方式检索(对于 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

问题

有谁知道为什么会发生这种情况?

最佳答案

如果 processInfo.processName 不起作用,请尝试另一种获取包的方法:

processInfo.pkgList[0]

关于android - PackageManager 为所有应用程序抛出 NameNotFoundException,甚至是我自己的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44651408/

相关文章:

android - 添加 PACKAGE_USAGE_STATS [Android Lollipop] 时 Manifest.xml 出错

java - Android安装过程中实时获取权限

android - 这个 "OnChecksumsReadyListener.onChecksumsReady"AbstractMethodError 背后的原因是什么?

android - 在Eclipse中,有什么方法可以同时在多个模拟器中启动应用程序吗?

java - 如何在 Android 上查找具有特定扩展名的所有文件?

android - Google Play 开发者控制台中没有崩溃报告?

java - Android 尝试在 OTA 应用更新后引用广播接收器的旧包名称

用于预览和 MediaCodec 输入 Surface 的 Android Camera2 管道

android - 使用 Jack 编译器时出错 - app/build/intermediates/packaged/debug/classes.zip' is an invalid library

java - 我怎样才能找到所有具有特定 Intent 过滤器的包?