从外部存储打开图像

Open an image from the external storage

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

我搜索了整个 Google 并尝试了很多方法来完成这项工作,但是 none 确实如此。我能找到的所有问题都是长达 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”并且我正在使用 phone 和 Android O (8.0)。

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

the path seems to be: content://ml.toufic.lyceelamartine.fileprovider/name/calendrier.png and this seems like an internal storage path.

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

The code above opens Google Photos successfully but it shows a black screen

您的Intent有两个问题。

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

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