android通过图库意图选择的相机图像未显示在imageview中

时间:2019-07-17 12:40:20

标签: java android

//这是我的画廊意图

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                    photoPickerIntent.setType("image/*");
                    startActivityForResult(photoPickerIntent,2);



protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
           if (requestCode == 2) {
                Bitmap bm=null;
                if (data != null) {
                    try {
                        bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
                        imageView.setImageBitmap(bm);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                Uri tempUri = getImageUri(getApplicationContext(), bm);
                File finalFile = new File(getRealPathFromURI(tempUri));
            } }

我正在我的android应用程序中实现相机和图库意图。当我捕获直通相机时,图像显示在imageview中,但是如果我尝试通过图库意图显示相同的相机图像,则图像不会显示。

注意:捕获的图像不是通过图库意图显示的,而其他文件夹图像则在imageview中显示

2 个答案:

答案 0 :(得分:2)

错误#1:ACTION_PICK不使用MIME类型。可以将ACTION_GET_CONTENT与MIME类型一起使用,或者将ACTION_PICK与集合Uri(例如MediaStore.Images.Media.EXTERNAL_CONTENT_URI)一起使用。

错误#2:您假设MediaStore知道如何从该Uri获取图像。由于Uri可能不是来自MediaStore,所以这是一个错误的假设。使用Glide或Picasso将图像加载到您的ImageView中。

错误#3:您正在将图像加载到主应用程序线程上。这将在加载图像时冻结UI。使用Glide或Picasso将图像加载到您的ImageView中,因为他们知道如何在后台线程上执行此操作。

错误#4:您似乎复制了一些代码“为位图获取Uri”。您不需要这样做。您已经有Uri的图像。它是data.getData(),您曾用它来尝试首先加载图像。

错误#5:您似乎复制了一些代码,声称这些代码旨在获得“ Uri的真实路径”。没有可靠的方法可以做到这一点。如果您希望File包含图像中的数据,请使用ContentResolveropenInputStream()InputStream所标识的内容上获取Uri,然后使用该InputStream将字节复制到您控制的某个文件的FileOutputStream中。

答案 1 :(得分:0)

尝试使用以下代码,希望对您有所帮助。

Uri selectedImage = data.getData();
Bitmap bitmap = null;
try {
   bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(selectedImage));
    } catch (FileNotFoundException e) {
         e.printStackTrace();
   }

 imageView.setImageBitmap(bitmap);