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