从gallary中获取图像时出错

时间:2016-08-04 12:29:33

标签: android android-intent android-contentprovider android-gallery android-bitmap

我制作了如下代码来获取图片:

private void openFileManager() {
    Intent i = new Intent(Intent.ACTION_PICK);
    i.setType("image/*");
    startActivityForResult(i, REQUEST_CODE_GALLERY);
}

并在 onActivityResult 方法中获取图片,如下所示:

Uri uri = data.getData();
InputStream is = getContentResolver().openInputStream(uri);
Bitmap b = BitmapFactory.decodeStream(is);
iv1.setImageBitmap(b);

但是得到错误:

08-04 17:44:36.630 20795-20795/com.test E/image path: content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Ffile%2F10750/ORIGINAL/NONE/1807946268
08-04 17:44:36.630 20795-20795/com.test E/image path: content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Ffile%2F10750/ORIGINAL/NONE/1807946268
08-04 17:44:36.647 20795-20795/com.test W/System.err: java.io.FileNotFoundException: No such file or directory

指向该行:InputStream is = getContentResolver().openInputStream(uri);

我在棉花糖中出现此错误,但在Kitkat中没有。我觉得Google Photo App只在ActivityResult中返回这种类型的URI。

版本:当Intent调用Google Photo应用程序进行图像选择时,我发现这是错误的。 Tnx @ Sanket。但是如何解决这个问题。任何代码都可以处理来自Google Photo和bifercate URI的URI以直接获取图片。因为我必须在Glide库函数中传递它以在ImageView中渲染。

2 个答案:

答案 0 :(得分:1)

提取谷歌照片时它是个例外。你可以使用这个class来获取它。

您需要将这2个类FileUtilsLocalStorageProvider复制到项目中,然后使用此方法获取onActiyityResult中的文件

File mPhotoFile = FileUtils.getFile(this, data.getData());

它适用于您使用 文档 目录或 媒体 目录的所有操作系统版本和天气。< / p>

答案 1 :(得分:1)

在android 5,6中尝试使用此代码进行图像提取

private Bitmap getBitmapFromUri(Uri uri) throws IOException {
        ParcelFileDescriptor parcelFileDescriptor =
                getLocalContext().getContentResolver().openFileDescriptor(uri, "r");
        FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return image;
    }

getLocalContext()是你的本地语境。