【问题标题】:Get a list of every launcher in Android获取 Android 中每个启动器的列表
【发布时间】:2011-09-04 18:31:35
【问题描述】:

在我的应用程序中,我想显示特定 Android 手机上每个可用启动器(用于主屏幕)的列表。是否可以从 Android 操作系统获取某种信息?如何进行此调用?

谢谢!

亲切的问候 丹尼尔

【问题讨论】:

    标签: android launcher homescreen


    【解决方案1】:

    上面的代码 sn-p 不能正常工作,因为启动器列表的结果还包括系统设置的应用程序,其包名为 com.android.settings。我的 Pixel 2 (Android 8.0) 和 Nexus 6 (Android 7.1) 都会出现这种意外结果。

    【讨论】:

      【解决方案2】:

      您可以查询与特定Intent匹配的ResolverInfo列表。下一个 sn-p 代码打印所有已安装的启动器。

      PackageManager pm = getPackageManager();
      Intent i = new Intent(Intent.ACTION_MAIN);
      i.addCategory(Intent.CATEGORY_HOME);
      List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
      for (ResolveInfo resolveInfo : lst) {
          Log.d("Test", "New Launcher Found: " + resolveInfo.activityInfo.packageName);
      }
      

      【讨论】:

      • 1. 你应该检查(!lst.isEmpty()),见off. reference2. 你的答案比@Flavio 的好,见 cmets
      • 对于Intent action也使用Intent.ACTION_MAIN,对于Intent category使用Intent.CATEGORY_HOME,而不是硬编码字符串。
      • isEmpty() 检查在 for each 中是没用的
      • 感谢@electrocrat 和 JacksOnF1re 的建议。答案已编辑。
      【解决方案3】:

      尝试以下方法:

      1. 获取已安装应用程序列表:

        列出 pkgList = getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);

      2. 遍历此列表并使用以下方法获取启动器活动:

        getPackageManager().getLaunchIntentForPackage(packageName);

      详情请阅读:PackageManager。希望这会有所帮助。

      【讨论】:

      • IIUC, getLaunchIntentForPackage(..) 将为您返回任何应用程序的启动意图,而不仅仅是启动器。例如。 “设置”和“媒体播放器”应用也有启动意图
      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      相关资源
      最近更新 更多