【问题标题】:calling android's basic launcher调用android的基本启动器
【发布时间】:2014-12-18 18:03:30
【问题描述】:

您好,我正在开发我的自定义启动器。我的自定义启动器设置为默认启动器,一旦用户以编程方式单击按钮,我需要调用 android 的基本启动器。我搜索了很多,发现我不能只关闭应用程序,所以完成()和退出(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);  

【问题讨论】:

  • I need to call the android's basic launcher once a user clicks a button programmatically - 为什么?你想做什么?对于您遇到的错误,除非您告诉我们错误是什么并在您的问题中包含堆栈跟踪表单 logcat,否则没有人可以提供帮助。
  • 老兄。我说当我的自定义启动器设置为默认值时,我试图以编程方式调用 Android 的基本启动器。我刚刚找到了解决方案并进行了更新。修复错误不是我的目标。感谢您的回复和帮助

标签: android launcher kiosk


【解决方案1】:

我正在尝试调用 Android 的基本启动器

没有“Android 的基本启动器”的概念。有数千种 Android 设备型号。有几十个(如果不是几百个)预安装的主屏幕实现。一个名为com.android.launcher,它将在少数设备上使用。

用解决方案编辑

不,这不是解决方案。正如我上面提到的,很少有设备有com.android.launcher。还有一些出于历史原因确实有它,它并没有反映 用户 认为他们最初的主屏幕实现。

欢迎您使用PackageManagerqueryIntentActivities() 查找有哪些活动有MAIN/HOME&lt;intent-filter&gt;。如果有两个匹配项,一个应该是您的活动,另一个应该是原始主屏幕。但是,完全有可能存在三个或更多匹配项,在这种情况下,您应该询问用户要调出哪个主屏幕实现。

【讨论】:

  • 或者也许只是隐式调用意图,以便 Android 为您执行请求?
  • @Machinarius:充其量,您需要使用 createChooser(),因为我认为 OP 的主屏幕实现是用户的默认设置,因此只需直接调用 startActivity() 即可路由用户回到她开始的地方。使用 createChooser() 的普通方式的缺点是 OP 的主屏幕会出现在列表中,因为它是 MAIN/HOME 活动,这可能会让用户感到困惑.
  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2011-12-06
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多