我正在从 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/