• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

android - 如何为我的应用从图库(SD 卡)中选择图像?

[复制链接]
菜鸟教程小白 发表于 2022-8-1 01:20:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这个问题最初是针对 Android 1.6 提出的。

我正在我的应用程序中处理照片选项。

我的 Activity 中有一个按钮和一个 ImageView。当我单击该按钮时,它会重定向到画廊,我将能够选择一个图像。选定的图像将出现在我的 ImageView 中。



Best Answer-推荐答案


近5年后更新的答案:

原始答案中的代码不再可靠工作,因为来自不同来源的图像有时会返回不同的内容 URI,即 content://而不是 file:// .更好的解决方案是简单地使用 context.getContentResolver().openInputStream(intent.getData()) ,因为这将返回一个您可以选择处理的 InputStream。

例如,BitmapFactory.decodeStream()在这种情况下工作得很好,因为您还可以使用 Options 和 inSampleSize 字段对大图像进行下采样并避免内存问题。

但是,像 Google Drive 这样的东西会将 URI 返回到实际上尚未下载的图像。因此,您需要在后台线程上执行 getContentResolver() 代码。

原答案:

其他答案解释了如何发送 Intent ,但没有很好地解释如何处理响应。这是有关如何执行此操作的一些示例代码:

protected void onActivityResult(int requestCode, int resultCode, 
       Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case REQ_CODE_PICK_IMAGE:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(
                               selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();


            Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
        }
    }
}

在此之后,您将选定的图像存储在“yourSelectedImage”中,以执行您想要的任何操作。此代码通过在 ContentResolver 数据库中获取图像的位置来工作,但仅靠它自己是不够的。每张图像都有大约 18 列信息,从文件路径到“上次修改日期”到照片拍摄地点的 GPS 坐标,尽管许多字段实际上并未使用。

为了节省时间,因为您实际上不需要其他字段,光标搜索是使用过滤器完成的。过滤器的工作方式是指定所需列的名称 MediaStore.Images.Media.DATA,即路径,然后将该字符串 [] 提供给游标查询。游标查询返回路径,但在使用 columnIndex 之前你不知道它在哪一列。代码。这只是根据其名称获取列的编号,与过滤过程中使用的相同。完成后,您终于可以使用我提供的最后一行代码将图像解码为位图。

关于android - 如何为我的应用从图库(SD 卡)中选择图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507898/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap