【问题标题】:How to get number of activities that satisfy implicit intent?如何获得满足隐含意图的活动数量?
【发布时间】:2019-09-02 20:03:14
【问题描述】:

我正在使用隐式意图,例如,打开图库以选择图像。我通常会执行以下操作:

Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    .takeIf { it.resolveActivity(activity.packageManager) != null }
    ?.let {
        val intent = Intent.createChooser(it, "Choose gallery")
        activity.startActivityForResult(intent, rc)
    }

但如果 intent 仅由我设备上的单个应用程序解决,并且除了一个之外没有其他图库应用程序,则 chooser 将仅显示单个选择,即没用。

我如何确定是否有许多活动可以处理该意图?如何获得真正适合的活动数​​量?因此,决定是否显示 chooser

【问题讨论】:

  • from: val info: ResolveInfo = activity.packageManager.resolveActivity(it, PackageManager.MATCH_DEFAULT_ONLY) info: ResolveInfo 将包含一些特定于供应商的 Activity 包和类名,用于解析隐式意图并显示多项选择,如果有多个其实选择。否则它将包含单个适当活动的包和类名。但无论如何我都想不通,既没有多选也没有单选,我也无法提前知道那个单选。
  • 为什么不在一个应用中显示选择器?从某种意义上说,它仍然是一个选择器,它让用户可以选择是离开您的应用并使用菜单上的那个,还是忽略菜单并留在您的应用中?
  • 产品要求不显示单应用程序选择,因为这会迫使用户执行额外的点击等。这根本没有意义让选择器具有单选。该应用程序的用户体验很清楚,用户故意单击某个按钮来添加图像。我认为允许用户“取消”是应用程序的责任,而不是外部组件(例如选择器)。

标签: android android-intent


【解决方案1】:

我如何确定是否有许多活动可以处理该意图?

PackageManager 上致电queryIntentActivities(),提供您的Intent

如何获取实际适合的活动数​​量?

抱歉,我不知道“适合”在这种情况下是什么意思。

因此,决定是否显示选择器

您可以简单地摆脱Intent.createChooser() 调用。仅当您希望强制用户拥有处理选择器时才使用它。如果您关闭Intent.createChooser()系统将在需要时自行显示选择器。如果发生这种情况:

  • 有 2+ 个活动与 Intent 匹配,并且
  • 用户没有为 Intent 结构选择默认活动

顺便说一句,请从您的代码中删除 type = "image/*"ACTION_PICK 不使用 MIME 类型。

【讨论】:

  • 谢谢,成功了。我所说的“适合”实际上是指可以处理这种意图的活动。
猜你喜欢
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多