провел некоторые исследования с источником Android, и теперь я склонен согласиться с Commonsware, что мой код верен. Я фактически перепроектировал это 3 недели назад, чтобы использовать packagemanager.resolveActivity вместо intent.resolveactivity:
this.pm = context.getPackageManager();
try {
Intent homeintent = new Intent(Intent.ACTION_MAIN);
homeintent.addCategory(Intent.CATEGORY_HOME);
homeintent.addCategory(Intent.CATEGORY_DEFAULT);// seems not needed here since This is a synonym for
// including
// the CATEGORY_DEFAULT in your supplied Intent per doc
this.resolveInfo = pm.resolveActivity(homeintent, PackageManager.MATCH_DEFAULT_ONLY);
ActivityInfo activityInfo = resolveInfo.activityInfo;
userHomeLauncherPackage = activityInfo.packageName;
userHomeLauncherClass = activityInfo.name;
userHomeLauncherName = activityInfo.loadLabel(pm).toString();
if (userHomeLauncherClass.contains("ResolverActivity"))
userHomeLauncherName = "";
} catch (Exception e) {
throw new Exception(e);
}
Это не помогло, так что иногда я получаю эти ошибки ...
На основании исходного кода,
ComponentName Intent.resolveActivity (PackageManager pm)
или
ActivityInfo Intent.resolveActivityInfo (PackageManager pm, int flags)
вызовите тот же метод, который определен в классе android.app.ContextImpl:
ResolveInfo информация = pm.resolveActivity (это, PackageManager.MATCH_DEFAULT_ONLY)
и определяется как:
@Override
public ResolveInfo resolveActivity(Intent intent, int flags) {
try {
return mPM.resolveIntent(
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
flags);
} catch (RemoteException e) {
throw new RuntimeException("Package manager has died", e);
}
}
поэтому в этот момент я пришел к выводу, что ничего не могу с этим поделать: (