我已经尝试了几个小时,使用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的初学者,任何帮助将不胜感激!

最佳答案

路径似乎是:content://ml.toufic.lyceelamartine.fileprovider/name/calendrier.png,这似乎是内部存储路径。


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


  上面的代码成功打开了Google相册,但显示黑屏


您的image/png有两个问题。

首先,不要使用通配符MIME类型。这是您的文件。您知道什么是MIME类型。使用实际的MIME类型(在本例中为addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION))。

其次,在调用Intent之前,请先在startActivity()上调用。目前,没有任何应用有权使用您的内容。

10-08 19:49