0

我正在尝试执行以下代码:

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME);
intent.setComponent(new ComponentName(" **Home package** "," **Home class** "));
                  startActivity(intent);

本质上,我正在寻找一种专门针对和加载确切的原始家庭应用程序的方法。

4

2 回答 2

1

从技术上讲,您无法始终知道“确切的、原始的、家庭应用程序”。

您可以使用PackageManagerqueryIntentActivities()查找所有响应MAIN/的人HOME Intents。如果有两个答案,而您的答案是一个(我猜是您的情况),那么另一个答案几乎就是“确切的、原始的、家庭应用程序”。您可以通过获取ApplicationInfo与已解析活动关联的对象并检查FLAG_SYSTEM它是否安装在系统映像中来进一步验证这一点。这种方法可能不是完全无懈可击,但它可能足以满足您的需求。

还有一个选项是让您在第一次运行时简单地记录当前的默认值MAIN/活动。HOME在用户选择将您设为默认值之前运行您的应用程序的可能性是不错的。同样,这也有漏洞(例如,在第一次运行您之前,它们会让您成为默认值)。

于 2011-08-14T22:21:42.403 回答
0

编辑:解决方案:

        PackageManager pm=getPackageManager();
        Intent main=new Intent(Intent.ACTION_MAIN, null);

        main.addCategory(Intent.CATEGORY_HOME);
        List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);

        Collections.sort(launchables,
                         new ResolveInfo.DisplayNameComparator(pm));

        int launcher_flag = findLauncherApp(launchables);

        ResolveInfo launchable = launchables.get(launcher_flag);

        ActivityInfo activity=launchable.activityInfo;
        ComponentName name=new ComponentName(activity.applicationInfo.packageName,
                                             activity.name);
        Intent i=new Intent(Intent.ACTION_MAIN);

        i.addCategory(Intent.CATEGORY_LAUNCHER);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        i.setComponent(name);

        startActivity(i);

findLaucherApp() 将 List 转换为字符串数组并询问每个字符串以查看它是否包含“com.android.launcher2”,然后返回其 id。

于 2011-08-17T21:29:21.627 回答