从外部存储打开图像

时间:2018-02-10 16:24:47

标签: java android uri android-external-storage

我已经尝试了几个小时,用Intent.ACTION_VIEW从Android的外部存储打开图像。正如你可能已经想到的那样,我仍然无法做到这一点。

我在Google上搜索过,我已经尝试了很多方法来完成这项工作,但是他们都没有。我能找到的所有问题都是长达1年的问题。我尝试使用FileProvider,这就是我最终的结果:

File imagePath = new File(Environment.getExternalStorageDirectory(), "LyceeLamartine/cache");
File newFile = new File(imagePath, "calendrier.png");
Uri contentUri = FileProvider.getUriForFile(MainActivity.this, "ml.toufic.lyceelamartine.fileprovider", newFile);

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(contentUri, "image/*");
startActivity(intent);

上面的代码成功打开了Google照片,但它显示的是黑屏,路径似乎是:content://ml.toufic.lyceelamartine.fileprovider/name/calendrier.png,这似乎是一个内部存储路径。

我想要访问的图像存储在:“/ storage_emulated/0/LyceeLamartine/cache/calendrier.png”,我正在使用带有Android O(8.0)的手机。

我还是Java的初学者,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

  

路径似乎是:content://ml.toufic.lyceelamartine.fileprovider/name/calendrier.png,这看起来像是一个内部存储路径。

这不是一条路。那是Uri。它有一个方案(content)。它指向您的FileProviderml.toufic.lyceelamartine.fileprovider)。看起来很好 - 如果Uri出现问题,FileProvider会在您尝试创建时抛出异常。

  

上面的代码成功打开了Google照片,但它显示黑屏

Intent有两个问题。

首先,不要使用通配符MIME类型。它是您的文件。 知道MIME类型是什么。使用实际的MIME类型(在本例中为image/png)。

其次,在调用addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)之前,在Intent上调用startActivity()作为设置的一部分。目前,没有应用程序有权使用您的内容。