最好的方法是获得主启动程序包名并启动它



我遇到一个关于如何获得home launcher packagename的问题。
在android中,有两种类型的home launcher:

  1. 初始启动器
  2. 3-third launcher,如go-launcher或OEM

所以,我们不能使用指定的packagename来启动它。最后,我想出了一个解决办法。
还有其他更好的方法吗?

    //find out the package with ACTION_MAIN & CATEGORY_HOME
    Intent i = new Intent();
    i.setAction(Intent.ACTION_MAIN);
    i.addCategory(Intent.CATEGORY_HOME);
    PackageManager pm = this.getPackageManager();
    List<ResolveInfo> ris = (List<ResolveInfo>) pm.queryIntentActivities(i,
            PackageManager.MATCH_DEFAULT_ONLY);
    Log.i("", ris.size() + "");
    //seletc the first one , doc says the first one is the home launcher currently
    if (ris != null && ris.size() > 0) {
        String pkg = ris.get(0).activityInfo.packageName;
        Log.i("HOME PKG NAME ", pkg);
        //start it 
        i.setClassName(ris.get(0).activityInfo.packageName, ris.get(0).activityInfo.name);
        startActivity(i);
    }

感谢https://groups.google.com/forum/?fromgroups=#!主题/android开发者/5 agsodwj-8

您可以使用类别CATEGORY_HOME和动作ACTION_MAIN的意图。

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);