您好我正在使用我的自定义启动器。我的自定义启动器设置为默认启动器,一旦用户以编程方式单击按钮,我需要调用android的基本启动器。我搜索了很多,发现我不能只关闭应用程序,所以finish()和退出(0)不起作用。 所有我发现它我只需要调用android的基本发射器,但很难得到最终的答案。这就是我所拥有的:
PackageManager pm=getPackageManager();
Intent main=new Intent(Intent.ACTION_MAIN, null);
List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
Collections.sort(launchables, new ResolveInfo.DisplayNameComparator(pm));
for(int i=0;i<launchables.size();i++) {
//find android's basic launcher package
if(launchables.get(i).toString().contains("com.android.launcher")) {
//open a package
ResolveInfo launchable = launchables.get(i);
Util.print(launchable.resolvePackageName);
Intent intent = pm.getLaunchIntentForPackage(launchable.resolvePackageName);
startActivity(intent);
}
}
我知道这段代码很难找到并调用一个包。此代码调用Android的设置,第二次调用发生错误。我很确定这段代码不好,我只是想让你知道我现在要做什么。谁能告诉我如何打开Android的基本启动器?
使用临时解决方案进行编辑
ComponentName name=new ComponentName("com.android.launcher", "com.android.launcher2.Launcher");
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setComponent(name);
startActivity(intent);
答案 0 :(得分:1)
我正在尝试调用Android的基本启动器
没有概念作为&#34; Android的基本发射器&#34;。有数以千计的Android设备型号。预先安装的主屏幕实现有数十个(如果不是数百个)。一个名为com.android.launcher
,它将在少数设备上。
使用解决方案编辑
不,这不是解决方案。如上所述,很少有设备com.android.launcher
。有些人出于历史原因确实存在它,并且它没有反映用户将其视为原始主屏幕实现的内容。
欢迎您使用PackageManager
和queryIntentActivities()
查找哪些活动包含MAIN
/ HOME
<intent-filter>
。如果有两个匹配,一个应该是您的活动,另一个是原始主屏幕。但是,完全可能有三个或更多匹配,在这种情况下,您应该询问用户提出哪个主屏幕实现。