2012-06-18 34 views
2

我创建了一个作为启动器的应用程序,它按预期工作,但我想让用户能够启动本机Android启动器。如何启动com.android.launcher?

我知道,Android启动包名是com.android.launcher

然而,当我试图通过调用

packageManager.getLaunchIntentForPackage("com.android.launcher"); 

,来了空从这个包得到启动意图名。

所以,我不知道如何使用包名来启动它,并且想知道是否有一些替代方法?

TIA

回答

6

我知道,Android启动包名是com.android.launcher

除了可能会或可能不会有任何给定的设备上。实际上,我预计它可能只有百分之几的设备。大多数制造商用他们自己的替换股票主屏幕。

想知道如果也许有一些替代方式?

使用PackageManagerqueryIntentActivities()找到支持ACTION_MAINCATEGORY_HOME的所有活动。从列表中删除您的活动。如果只剩下一个,请启动该活动。如果还有多个选项,请启动自己的选择器以显示可用选项。这样,无论其他主屏如何存在,您都可以启动它。

UPDATE

给出一个ResolveInfo名为launchableACTION_MAIN/CATEGORY_HOME模板Intent命名i,推出这一活动,做到:

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

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

startActivity(i); 
+0

共享,这是其实我在做什么(为了这个问题,我简化了)。问题是我不知道*如何启动它。我所拥有的只是包名(当我说“我知道......等等”时,这就是我的意思。那么,当我引用上面的方法时,如何将该包名转换为可启动的(或可驱动的)意图(getLaunchIntentForPackage)在封装上返回null,这是通过消除进程是主页Android启动器(并且在此设备上恰好是“com.android.launcher”)? –

+0

@ Dr.Dredel:查看更新。您可以看到更多扩展这里的例子:https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot在这种情况下,我实现了一个启动器,所以我的模板'Intent'是用于'CATEGORY_LAUNCHER',而不是'CATEGORY_HOME ',我从'ListView'点击获得'ResolveInfo'。 – CommonsWare

+0

可爱,谢谢! –