当前位置: 首页 > 知识库问答 >
问题:

Android从内部/外部存储中选择映像

凌鹏程
2023-03-14

我正在尝试将设备的内部和外部内存中的映像添加到我的应用程序中。我可以打开图库意图并获得文件的路径,但我无法将其转换为ImageView的位图。下面是调用图库的图标的onClick监听器的代码:

icoGallery = (ImageView) findViewById(R.id.icoGallery);
icoGallery.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        galleryIntent.setType("image/*");
        startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
    }
});

下面是OnActivitResult的代码:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null !=data){
        Uri selectedImageUri = data.getData();
        String[] projection = {MediaStore.Images.Media.DATA};
        @SuppressWarnings("deprecation")
        Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null, null);
        cursor.moveToFirst();

        int column_index = cursor.getColumnIndex(projection[0]);
        imagePath = cursor.getString(column_index);
        cursor.close();

        imageFile = new File(imagePath);
        if (imageFile.exists()){
            Bitmap imageBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
            imgPhoto.setImageBitmap(imageBitmap);
        }

    } else {
        Toast.makeText(context, "You have not selected and image", Toast.LENGTH_SHORT).show();
    }
}

我包含了对清单的以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我一直得到以下错误

E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/20170215_152240.jpg: open failed: EACCES (Permission denied)

我相信它正在失败的部分原因是因为设备只有内部存储。有没有办法从本地存储或外部存储的设备中添加映像?或者我必须做一个函数来询问用户他们是想使用内部还是外部存储?

提前致谢:)

编辑:错误是由于未初始化ImageView造成的。但是,从图库activity回来并返回文件的路径后,图像不显示在ImageView上。它会改变为背景色。

共有1个答案

萧允晨
2023-03-14

您可以将URI直接设置为ImageView,如下所示:

Uri selectedImageUri = data.getData();
imageView.setImageURI(selectedImageUri);

然后从ImageView获取位图:

 Drawable drawable =  imageView.getDrawable();
 Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
 类似资料:
  • 问题内容: 我的应用程序( Android API 15 )制作图片并将其存储在内部存储器的文件夹中。现在,我想将此文件复制到外部存储中的另一个文件夹,例如。我尝试了以下方法: 方法1: 方法2: 方法3: 这些方法都不能解决我的任务。在检查了许多相关主题之后,我发现的唯一建议是验证 在和它确实存在。 该 方法#1 完成执行,但没有文件夹和文件被复制。 在 方法#2 ,应用程序失败,异常的,但对象

  • 这些方法都不能解决我的任务。中检查了一些相关主题,我发现的唯一建议是验证 在中,并且它仍然存在。 方法#1完成执行,但没有复制文件夹和文件。 因为这是我迈向Android的第一步,我觉得我错过了一些小东西。请告诉我,如何在Android中将文件从一个文件夹复制到另一个文件夹,包括文件从内部内存移动到外部内存。

  • 我试图使用Adobe reader读取从服务器下载的pdf文件,但问题是当我将其存储在内部存储时,其他应用程序无法读取该文件。现在我想知道如何将此文件复制到外部存储(/sdcard/)中,以便pdf查看器可以查看。 由于安全原因,我将文件存储在内部存储,然后删除外部存储的文件。 我的问题是如何复制保存在内部存储中的文件,而不使用raw或将其放入InputStream中的资产。

  • 问题内容: 如何复制到外部存储保持,以便以后可以共享首选项。 试图读取并另存为一个文件,创建了类型,但我需要一个。想过遍历应用程序的内部存储和复制文件,然后将其放入外部存储,但这可能太复杂了。 真的很想知道是否存在一种简单而明智的方式来传递`sharedpreferences。 问题答案: 使用此代码, 并取回它, 注意 使用此代码只能处理字符串类型首选项,

  • 01-20 08:55:14.787:W/System.err(1383):at libcore.io.iobridge.open(iobridge.java:409)01-20 08:55:14.787:W/System.err(1383):at java.io.fileInputStream.(fileInputstream.java:78)01-20 08:55:14.827:W/Syste

  • 问题内容: 我正在处理一个查询(一个SELECT),我需要将此查询的结果插入表中。在进行插入之前,我需要做一些检查,如果所有列都有效,我将进行插入。 该检查是在存储过程中完成的。在其他地方也使用相同的过程。因此,我正在考虑使用相同的过程进行检查。 程序进行检查并插入值都可以。 我试图在SELECT内调用该过程,但是它不起作用。 这种代码不起作用。 我认为可以使用游标完成此操作,但我想避免使用游标。