我已经尝试了几个小时,使用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
)。它指向您的FileProvider
(ml.toufic.lyceelamartine.fileprovider
)。看起来很好-如果Uri
出现问题,当您尝试创建FileProvider
时,Intent
会抛出异常。
上面的代码成功打开了Google相册,但显示黑屏
您的image/png
有两个问题。
首先,不要使用通配符MIME类型。这是您的文件。您知道什么是MIME类型。使用实际的MIME类型(在本例中为addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
)。
其次,在调用Intent
之前,请先在startActivity()
上调用。目前,没有任何应用有权使用您的内容。