允许用户选择图像的相机或图库

2023-12-25

我想做的事情看起来很简单,但经过几天的搜索,我不太明白。

我有一个应用程序,允许用户选择多个(最多 5 个)图像。我正在使用一个ImageView。当用户点击ImageView,我想让他们选择

  1. 从图库中选择图像,或
  2. 使用相机捕捉图像。

我开始使用ACTION_GET_CONTENT意图,这对于进入画廊很有效。然后我尝试使用ACTION_PICK_ACTIVITY意图允许用户选择相机或图库:

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。菜单按预期显示,但唯一的选项是图库和文件......没有相机)。

有没有更好/更简单的方法来做到这一点,我错过了?谢谢你的帮助。


如何启动单个 Intent 以从图库或相机或任何注册用于浏览文件系统的应用程序中选择图像。

与其创建包含 Intent 选项列表的对话框,不如使用 Intent.createChooser 来访问各种“相机”、“图库”甚至第三方文件系统浏览器应用程序的图形图标和短名称例如“阿斯特罗”等。

这描述了如何使用标准选择器意图并向其添加其他意图。

private Uri outputFileUri;

private void openImageIntent() {

    // Determine Uri of camera image to save.
    final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator);
    root.mkdirs();
    final String fname = Utils.getUniqueImageFilename();
    final File sdImageMainDirectory = new File(root, fname);
    outputFileUri = Uri.fromFile(sdImageMainDirectory);

    // Camera.
    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    final PackageManager packageManager = getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for(ResolveInfo res : listCam) {
        final String packageName = res.activityInfo.packageName;
        final Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(packageName, res.activityInfo.name));
        intent.setPackage(packageName);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        cameraIntents.add(intent);
    }

    // Filesystem.
    final Intent galleryIntent = new Intent();
    galleryIntent.setType("image/*");
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

    // Chooser of filesystem options.
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

    // Add the camera options.
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));

    startActivityForResult(chooserIntent, YOUR_SELECT_PICTURE_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) {
            final boolean isCamera;
            if (data == null) {
                isCamera = true;
            } else {
                final String action = data.getAction();
                if (action == null) {
                    isCamera = false;
                } else {
                    isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }

            Uri selectedImageUri;
            if (isCamera) {
                selectedImageUri = outputFileUri;
            } else {
                selectedImageUri = data == null ? null : data.getData();
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

允许用户选择图像的相机或图库 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • ADO/SQL Server:“超时已过期”的错误代码是什么?

    我试图捕获来自 ADO 的 超时已过期 错误 当超时发生时 ADO 返回 Number 0x80040E31 DB E ABORTLIMITREACHED in oledberr h SQLState HYT00 NativeError 0
  • “空间”数据的平滑

    我有2个变量x and y它们是 0 1 处的笛卡尔坐标 以及z是这些坐标处的 连续 变量的值 这z向量有一些重要的异常值 x lt sample seq 0 1 0 001 replace F y lt sample seq 0 1 0
  • LVM2:无法创建块设备

    我正在尝试利用LVM2Linux Centos6 0 中的功能 当尝试在特定块设备上定义 PV 的第一步时 我收到以下错误消息 root localhost pvcreate dev sdb 无法以独占方式打开 dev sdb 挂载的文件系
  • 由于 Keycloak 默认登录重定向而导致混合内容错误

    所需信息 我在 Spring 项目后面使用 Keycloak Docker 版本 该项目的客户端是React 客户端和后端之间的通信由REST服务提供 客户端是安全的并使用 https 方案 这是我的 Spring 配置 keycloak
  • 将空值添加到 ASP.net MVC 中的 DropDownList

    我正在构建一个数据输入界面 并已使用 DropDownList 成功绑定了具有数据参考表的列 以便用户从预配置的值中进行选择 我现在的问题是 我不希望默认选择第一个值 我需要强制用户从列表中选择一个值 以避免出现错误 因为他们没有选择该字段
  • CodeIgniter 负载控制器视图

    有没有办法从视图加载控制器 这就是我所追求的 我想多次使用一个视图 但该视图是由单独的控制器加载的 该控制器提供视图和来自数据库的信息 因此 由于来自模型的信息 我不能只设置 this load gt view 等等 有没有办法做这件事 或
  • JNI 在应用程序中检测到错误:调用 JNI GetMethodID 时出现未决异常 java.lang.ClassNotFoundException:未找到类

    我收到以下错误 JNI 在应用程序中检测到错误 调用 JNI GetMethodID 时出现未决异常 java lang ClassNotFoundException 在路径上找不到类 package name class DexPathL
  • HTTPS 的代理 Servlet

    我有一个安全站点 需要在某些页面上显示来自外部非 https URL 的图像 我想创建一个 servlet 仅用作将图像数据传递到页面的代理 一种方法是使用 Apache 的 HttpClient 下载图像数据 然后使用 IOUtils c
  • a href=javascript:function() 在 Firefox 中不起作用

    我尝试使用a href javascript function 在一个按钮中 并带有执行它的函数 它在 Chrome 中工作 但在 Firefox 中不起作用 Firefox 不会发出警报并打开空白选项卡 有人可以帮助我吗 下面是按钮代码
  • Eclipse + Egit:将项目克隆到工作区

    我对它是如何工作的有点困惑 我在 Github 上有一个现有的 git 存储库 并且想将其克隆到我的工作区中 我的目标是将本地存储库直接存储在我的工作区文件夹中 但我无法将其与 EGit 一起使用 当我想使用 EGit 克隆 github
  • 如何用 Jest 模拟/替换对象的 getter 函数?

    在Sinon我可以做以下事情 var myObj prop foo sinon stub myObj prop get function getterFn return bar myObj prop bar 但我怎样才能对 Jest 做同样
  • 究竟什么是“执着无明”?

    持久性无知通常被定义为持久和检索标准 NET 对象 或 POCO 如果您确实坚持给它们命名 的能力 还有一个标准 NET 对象的定义似乎已被广泛接受 http msdn microsoft com en us magazine dd8825
  • 在javascript中获取div位置(顶部)?

    我使用 css 设置了一个 div 的高度top 26px 我在其他地方还有其他 div 我想与该 div 保持一致 我注意到jquery写作 css top 获取我的 css 而不是 div 的 y 坐标 如何使用 javascript
  • Hibernate 不等于示例标准

    Hibernate 有示例标准 例如 Example equal Example create mydbObject 有没有办法反其道而行之 例如 Example notEqual Example createNotEqual mydbOb
  • 如何在 SBT 中刷新更新的 Git 依赖项?

    我已经配置了 SBT 0 11 0 以将 GitHub 项目作为依赖项拉入 按照我的回答这个问题在这里 https stackoverflow com questions 7550376 how can sbt pull dependenc
  • 在AWS CDK中执行代码之前如何等待堆栈完成?

    我正在尝试 AWS CDK 但当我尝试执行依赖于堆栈完成的代码块时 我陷入了困境 这是我当前的代码 class Application extends cdk Construct constructor scope cdk Construc
  • 如何编写一个函数来比较多组布尔(真/假)答案并对其进行排名?

    我已经开始了一个项目 事实证明它比我最初想象的要复杂得多 我正在尝试规划一个基于布尔 真 假 问题和答案的系统 系统上的用户可以回答大量布尔 真 假 问题中的任何问题 并根据他们的答案看到一个显示最相似用户 按相似度顺序排列 的列表 我在谷
  • 静态容器已经有一个与之关联的内核

    部署到 Azure 时出现与 Ninject 相关的错误 The static container already has a kernel associated with it 但在本地运行良好 而且之前它一直在本地和 Azure 上运行
  • Python 中的 Webdriver 屏幕截图

    使用python在windows上使用Selenium Webdriver进行屏幕截图时 屏幕截图直接保存到程序的路径中 有没有办法将 png文件保存到特定目录 Use driver save screenshot path to file
  • 允许用户选择图像的相机或图库

    我想做的事情看起来很简单 但经过几天的搜索 我不太明白 我有一个应用程序 允许用户选择多个 最多 5 个 图像 我正在使用一个ImageView 当用户点击ImageView 我想让他们选择 从图库中选择图像 或 使用相机捕捉图像 我开始使