从画廊加载图像不起作用两次

Load image from gallery doesn't works twice

我 select 图片来自画廊。现在我将它加载到临时文件中并可以在 ImageView 中显示它。一切正常。

Uri uri = data.getData();

File file = new File(uri+"");

String fileName = file.getName();
String filePath = file.getParent();

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

//here come's the code to save the temp-file and so on

在fileName和filePath中我保存了名称和路径以备后用。因为如果用户想保存图片我想复制一份。

URI shown in the debugger: content:/media/external/images/media/12345
filePath:  content:/media/external/images/media
fileName:  12345

如果我想保存图像,我使用文件名和文件路径来构建 URI,并希望像上面那样做。但它不起作用。我从 MediaStore 得到一个 FileNotFoundException "no content provider"。嗯 - 在我删除应用程序进行新测试之前,"No such file or directory" 出现了,我想我用 READ_EXTERNAL_STORAGE 权限消除了 "no content provider" 异常。

Uri uri = Uri.parse(filePath +"/"+ fileName);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);

这里我在调试器中也看到了正确的 URI。

怎么了?

我已经在 AndroidManifest 中设置了权限 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。

In the fileName and filePath I save the name and path for later use

Uri 不是文件,你的肯定不是文件。

What is wrong?

您的 Uri 有一个 content 方案。这是由 ContentProvider 提供的。你没有指出这个 Uri 来自哪里,但我猜它来自 ACTION_GET_DOCUMENT 或类似的东西。在那种情况下,就像需要工作会话的 Web URL,your access to the content identified by that Uri is short.

如果您想长期访问内容,请将其下载到您的应用程序中,就像从 Web 下载内容一样 URL。