调用android';s基本发射器
嗨,我正在做我的自定义启动器。我的自定义启动器设置为默认启动器,一旦用户以编程方式单击按钮,我需要调用android的基本启动器。我搜索了很多,发现我不能关闭应用程序,所以finish()和exit(0)不起作用。 我只需要打电话给安卓的基本启动器,就可以找到它,但很难得到最终的答案。以下是我所拥有的:调用android';s基本发射器,android,launcher,kiosk,Android,Launcher,Kiosk,嗨,我正在做我的自定义启动器。我的自定义启动器设置为默认启动器,一旦用户以编程方式单击按钮,我需要调用android的基本启动器。我搜索了很多,发现我不能关闭应用程序,所以finish()和exit(0)不起作用。 我只需要打电话给安卓的基本启动器,就可以找到它,但很难得到最终的答案。以下是我所拥有的: PackageManager pm=getPackageManager(); Intent main=new Intent(Intent.ACTION_MAIN, null);
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的基本启动器”的概念。Android设备有数千种型号。有几十种(如果不是几百种的话)预安装的主屏幕实现。其中一个名为com.android.launcher
,将在少数设备上使用
用解决方案编辑
不,这不是解决办法。如上所述,很少有设备具有com.android.launcher
。有些人确实是出于历史原因才有了它,但它并没有反映出用户对其原始主屏幕实现的看法
欢迎使用
PackageManager
和queryIntentActivities()
查找哪些活动有MAIN
/主页
。如果有两个匹配项,一个应该是您的活动,另一个应该是原始主屏幕。但是,完全有可能存在三个或更多匹配项,在这种情况下,您应该询问用户要使用哪个主屏幕实现。一旦用户以编程方式单击按钮,我需要调用android的基本启动器
-为什么?你想干什么?对于您的错误,除非您告诉我们错误是什么,并在您的问题中包含堆栈跟踪表logcat,否则没有人能提供帮助。我说过,当我的自定义启动器设置为默认值时,我试图通过编程方式调用Android的基本启动器。我刚刚找到了一个解决方案并进行了更新。纠正错误不是我的目标。感谢您的回复和帮助,或者只是隐式地调用意图,这样Android就可以满足您的要求了?@Machinarius:充其量,您需要使用createChooser()
,因为我假设OP的主屏幕实现是用户的默认设置,所以只需直接使用startActivity()
呼叫会将用户直接路由回起始位置。使用createChooser()
的常用方法的缺点是OP的主屏幕也会出现在列表中,因为它是一个主/主活动,可能会让用户感到困惑。感谢您的帮助!
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);