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]