如何获得满足隐式意图的活动数量?

Max*_*lov 3 android android-intent

我正在使用隐式意图来打开画廊以选择图像。我通常会执行以下操作:

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)
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果该意图仅通过我设备上的单个应用程序解决,并且没有其他图库应用程序,只有一个应用程序,则选择器将仅显示无用的单个选择。

我如何确定是否有许多活动可以解决该意图?如何获得实际适合的活动数​​量?因此,决定是否显示选择器

Com*_*are 5

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

呼叫queryIntentActivities()PackageManager,提供你的Intent

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

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

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

您可以简单地摆脱Intent.createChooser()通话。仅当您希望强迫用户不得不与选择者打交道时,才使用它。如果不选择Intent.createChooser()则系统将在需要时自行显示选择器。在以下情况下会发生这种情况:

  • 有2个以上与匹配的活动Intent,并且
  • 用户尚未为该Intent结构选择默认活动

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