我做了如下代码来获得图像:
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);
我在棉花糖里有这个错误,但在基特却没有。我觉得谷歌照片应用程序只在ActivityResult中返回这种类型的URI。
版本:当内部意向调用谷歌照片应用程序进行图像选择时,我知道这是一个错误。Tnx@Sanket。但是如何解决这个问题。任何处理谷歌照片URI的代码和直接获取图片的双向URI。因为我必须在Glide Library函数中传递它才能在ImageView中渲染。
在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()是本地上下文。
获取谷歌照片时是个例外。你可以使用这个类来获取它。
您需要将这两个类FileUtils和LocalStorageProvider复制到您的项目中,然后可以使用此方法在onActiyityResult中获取文件
File mPhotoFile = FileUtils.getFile(this, data.getData());
它将适用于所有操作系统版本,无论您使用的是document目录还是media目录。