6

嗨,寻找这个简单的问题已经 2 天了。我想从我的应用程序启动 Android 自己的启动器,即使它没有设置为默认值。

   final PackageManager packageManager=getPackageManager();
   Intent intent = packageManager.getLaunchIntentForPackage("com.android.launcher");

这为 Android 自己的启动器返回 null 但如果我尝试自定义启动器成功给我

4

2 回答 2

12

在调查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);
}
于 2011-12-29T09:42:57.693 回答
1

您确定默认Google Android Launcher安装在您的设备上吗?如果不是,那就是真的NULL

于 2011-12-15T10:47:42.453 回答