【发布时间】:2021-12-28 00:01:34
【问题描述】:
我有一个允许用户拍照的应用程序。然后我将图像存储在本地文件中并将 URI 保存到 Room。然后,我有一个与具有图像视图的应用程序关联的小部件。我使用 Dagger-Hilt 将我的数据库注入到小部件中,并成功将该 URI 传递给我的 updateAppWidget 方法
有问题的 URI:
file:///storage/emulated/0/Android/media/com.sudharsanravikumar.myapplication/AlbumExpo/2021-11-08-07-37-55-596.jpg
问题是应用程序崩溃并出现以下错误:
java.lang.IllegalArgumentException: Failed to find configured root that contains /file:/storage/emulated/0/Android/media/com.sudharsanravikumar.myapplication/AlbumExpo/2021-11-08-07-37-55-596.jpg
我在类似的 SO 问题上尝试了很多东西,但感觉好像我错过了一些重要信息。我想我只是不清楚如何在清单上使用文件提供程序标签来正确地将应用程序指向应用程序存储我的图像的目录。我不确定在代码方面要显示什么,所以如果您需要任何内容,请在 cmets 中询问。
原来我的错误是:
android.os.FileUriExposedException: file:///storage/emulated/0/Android/media/com.sudharsanravikumar.myapplication/AlbumExpo/2021-11-08-07-37-55-596.jpg exposed beyond app through RemoteViews.setUri()
我直接调用时生成的
views.setImageViewUri(R.id.img_1, Uri.parse(uri.uri))
使用上面的原始 uri。为了尝试解决这个问题,我遵循了这个接受的答案 So question
这导致我这样做:
val photoURI = FileProvider.getUriForFile(
context,
"com.sudharsanravikumar.myapplication.provider",
File(uri.uri)
)
views.setImageViewUri(R.id.img_1, photoURI)
我假设从我的原始 uri 创建文件然后使用文件提供程序将其重新转换为 uri 的过程使其路径变为错误所说的内容。
【问题讨论】:
-
“有问题的 URI”——这不是有效的
Uri。出于某种原因,您有一个不应该存在的领先/。 -
对不起,我粘贴了错误的文字,我已经更新了问题,错误上的额外/来自记录器
-
该错误表明您的原始文本是您实际使用的
FileProvider。错误消息显示相同的前导/。 -
我添加了更多信息
标签: android android-widget android-fileprovider