在调查getLaunchIntentForPackage的源代码后找到了解决方案。根据文档,
当前实现将首先查找类别 CATEGORY_INFO 中的主要活动,然后查找类别 CATEGORY_LAUNCHER 中的主要活动,或者如果都没有找到则返回 null。
因此,该函数不查找 CATEGORY_HOME,我按照以下方式重写了它,它运行良好。
Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
intentToResolve.addCategory(Intent.CATEGORY_HOME);
intentToResolve.setPackage("com.android.launcher");
ResolveInfo ri = getPackageManager().resolveActivity(intentToResolve, 0);
if (ri != null)
{
Intent intent = new Intent(intentToResolve);
intent.setClassName(ri.activityInfo.applicationInfo.packageName, ri.activityInfo.name);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}