我已经尝试了几个小时,用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的初学者,非常感谢任何帮助!
答案 0 :(得分:2)
路径似乎是:content://ml.toufic.lyceelamartine.fileprovider/name/calendrier.png,这看起来像是一个内部存储路径。
这不是一条路。那是Uri
。它有一个方案(content
)。它指向您的FileProvider
(ml.toufic.lyceelamartine.fileprovider
)。看起来很好 - 如果Uri
出现问题,FileProvider
会在您尝试创建时抛出异常。
上面的代码成功打开了Google照片,但它显示黑屏
Intent
有两个问题。
首先,不要使用通配符MIME类型。它是您的文件。 您知道MIME类型是什么。使用实际的MIME类型(在本例中为image/png
)。
其次,在调用addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
之前,在Intent
上调用startActivity()
作为设置的一部分。目前,没有应用程序有权使用您的内容。