从我的应用程序打开Android自己的启动器

Zee*_*bAs 6 android launcher package-managers homescreen

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

   final PackageManager packageManager=getPackageManager();
   Intent intent = packageManager.getLaunchIntentForPackage("com.android.launcher");
Run Code Online (Sandbox Code Playgroud)

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

Pal*_*ani 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我尝试使用相同的"com.android.phone"但由于某种原因它不起作用.有什么投入? (2认同)