我知道,Android启动包名是com.android.launcher
除了可能会或可能不会有任何给定的设备上。实际上,我预计它可能只有百分之几的设备。大多数制造商用他们自己的替换股票主屏幕。
想知道如果也许有一些替代方式?
使用PackageManager
和queryIntentActivities()
找到支持ACTION_MAIN
和CATEGORY_HOME
的所有活动。从列表中删除您的活动。如果只剩下一个,请启动该活动。如果还有多个选项,请启动自己的选择器以显示可用选项。这样,无论其他主屏如何存在,您都可以启动它。
UPDATE
给出一个ResolveInfo
名为launchable
和ACTION_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);
共享,这是其实我在做什么(为了这个问题,我简化了)。问题是我不知道*如何启动它。我所拥有的只是包名(当我说“我知道......等等”时,这就是我的意思。那么,当我引用上面的方法时,如何将该包名转换为可启动的(或可驱动的)意图(getLaunchIntentForPackage)在封装上返回null,这是通过消除进程是主页Android启动器(并且在此设备上恰好是“com.android.launcher”)? –
@ Dr.Dredel:查看更新。您可以看到更多扩展这里的例子:https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot在这种情况下,我实现了一个启动器,所以我的模板'Intent'是用于'CATEGORY_LAUNCHER',而不是'CATEGORY_HOME ',我从'ListView'点击获得'ResolveInfo'。 – CommonsWare
可爱,谢谢! –