我想做的事情似乎很简单,但经过几天的搜索,我还是不太明白.

我有一个应用程序,允许用户 Select 多个(最多5个)图像.我用的是ImageView.当用户点击ImageView时,我想允许他们 Select

  1. 从库中 Select 图像,或
  2. 使用相机拍摄图像.

我一开始就用了ACTION_GET_CONTENT的意向,这对我go gallery 很管用.然后,我try 使用ACTION_PICK_ACTIVITY意图来允许用户 Select 相机或 gallery :

Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*"); 
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);

但我似乎只能加上一个EXTRA_INTENT.菜单按预期显示,但唯一的选项是Gallery和Files....没有摄像头).

有没有更好/更简单的方法可以做到这一点,而我却错过了?谢谢你的帮助.

推荐答案

您必须创建自己的 Select 器对话框,合并两个意图解析结果.

为此,您需要为两个原始意图向PackageManager查询PackageManager.queryIntentActivities(),并 for each 检索到的活动创建一个新意图的最终可能意图列表,如下所示:

List<Intent> yourIntentsList = new ArrayList<Intent>();

List<ResolveInfo> listCam = packageManager.queryIntentActivities(camIntent, 0);
for (ResolveInfo res : listCam) {
    final Intent finalIntent = new Intent(camIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    yourIntentsList.add(finalIntent);
}

List<ResolveInfo> listGall = packageManager.queryIntentActivities(gallIntent, 0);
for (ResolveInfo res : listGall) {
    final Intent finalIntent = new Intent(gallIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    yourIntentsList.add(finalIntent);
}

(我直接在这里写了这篇文章,所以可能无法编译)

然后,有关从列表创建自定义对话框的更多信息,请参见https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog

Android相关问答推荐

在画布上画直线

在Android Studio Iguana上运行示例代码时,Gradle Build错误

Android意图过滤器不限制应用程序仅处理YouTube链接

Android在NavHost中的LazyColumn中编写约束布局:error - replace()在未放置的项目上调用

在androidStudio中,如何使用带有ResolutionStrategy的ResolutionSelector而不是setTargetResolve()?

判断文本视图是否为单行

如何在android库中关联应用程序链接?

Jetpack Compose:如何将文本放置在行的右侧?

在 Bash 脚本中使用 XMLLINT 解析 XML 单元测试文件,并将其放入数组中以表示成功和失败

在 compose android 中创建一个圆形按钮和居中文本

在模块 jetified-kotlin-stdlib-1.8.10 中发现重复的类 kotlin.random.jdk8,带有启动基准

Material 3 中的 ModalBottomSheet 用于 compose

Android 设备断开连接后发送的 BLE 蓝牙数据

如何将可重用的 ExtendedFloatingActionButton 与可重用的脚手架链接起来

未解决的参考:pagerTabIndicatorOffset

在 Jetpack Compose 中自动滚动后面的项目

Int 传递给 Intent 但Android工作室说我传递了一个字符串

将应用更改为暗模式后 Android MainActivity 数据泄漏

如何将新的 ComponentActivity 与 ViewBinding 和其他旧的 AppCompatActivity 组件一起使用

ObjectBox,如何在冲突中放弃一切迁移?