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

Android从内部/外部存储器中选择图像,android,storage,Android,Storage,我正在尝试将设备的内部和外部内存中的图像添加到我的应用程序中。我可以打开gallery intent并获取文件的路径,但无法将其转换为ImageView的位图。 以下是调用库的图标的onClick侦听器的代码: icoGallery = (ImageView) findViewById(R.id.icoGallery); icoGallery.setOnClickListener(new View.OnClickListener() { @Override public void

我正在尝试将设备的内部和外部内存中的图像添加到我的应用程序中。我可以打开gallery intent并获取文件的路径,但无法将其转换为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"/>
我相信它失败的部分原因是因为该设备只有内部存储。是否有方法从本地存储器或外部存储器上的设备添加映像?或者我是否必须创建一个函数,询问用户是否要使用内部或外部存储

提前感谢:)

编辑:
错误是由于未初始化ImageView引起的。但是,从Gallery活动返回并返回文件路径后,图像不会显示在ImageView上。它将更改为背景色。

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

Uri selectedImageUri = data.getData();
imageView.setImageURI(selectedImageUri);
然后从ImageView获取位图:

 Drawable drawable =  imageView.getDrawable();
 Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

你在模拟器上运行吗?如果没有,请尝试在实际设备中运行,并从电脑中删除usb连接。我正在实际设备上进行测试。仍然没有更改您正在运行的设备的版本是什么?我猜是安卓6.0。如果是这样,那是因为您需要启用运行时权限。尝试使用Android 6.0之前的设备,看看你的代码是否正常工作。非常感谢!!!!这很好用。因此,现在我可以从Uri设置活动的图像,但当我尝试在RecyclerView上执行相同操作时,它只显示背景色。
 Drawable drawable =  imageView.getDrawable();
 Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();