【问题标题】:Error While fetch image from gallary从图库中获取图像时出错
【发布时间】:2016-08-04 12:29:33
【问题描述】:

我编写了如下代码来获取图像:

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。

版本:当内部意图调用谷歌照片应用程序进行图像选择时,我知道这是错误的。 Tnx @Sanket。但是如何解决这个问题。用于处理来自 Google Photo 的 URI 的任何代码,并将 URI 分叉以直接获取图片。因为我必须在 Glide Library 函数中传递它才能在 ImageView 中渲染。

【问题讨论】:

  • 尝试切换到ACTION_GET_CONTENTACTION_PICK 用于从特定集合中挑选一段内容。要根据 MIME 类型选择内容,请使用 ACTION_GET_CONTENT
  • 它仍然是同样的错误@CommonsWare。我遇到的另一个问题是如果我使用 ACTION_GET_CONTENT 那么它会显示所有文件,即使它的图像与否。

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


【解决方案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() 是你的本地上下文。

【讨论】:

  • 太棒了!这个 ParcelFileDescriptor 和 FileDescriptor 为我工作。 tnx.
  • 我在 kitkat 中发现 File not found 异常
【解决方案2】:

获取谷歌照片时出现异常。您可以使用此class 获取它。

您需要将这两个类FileUtilsLocalStorageProvider复制到您的项目中,您可以使用此方法在onActiyityResult中获取文件

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

它适用于您使用 document 目录或 media 目录的所有操作系统版本和天气。

【讨论】:

  • 我不知道为什么这个答案被否决了。您可以使用他指向的代码行。
  • 嗨。如果我从你指出的方法中得到回报,你能说我,那么我该如何使用该 uri 来获取图像? @sanket
  • @Sanket 如何添加您在 gradle 中指出的库?
  • @Dharvikshah 你的问题解决了吗,还是需要集成这个库?
  • 它由 ParcelFileDescriptor 和 FileDescriptor 解决。但是tnx。但我真的很想知道你提到的图书馆的 gradle 线。有任何编译代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2021-03-29
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多