You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Widget中设置Room存储的图片URI出现FileProvider配置错误如何解决

问题根因

你当前的报错由两个问题共同导致:

  1. 构造File对象时直接传入了带file://前缀的Uri字符串,解析得到的文件路径额外多了/file:前缀,和实际存储路径不匹配
  2. 未给桌面启动器授予FileProvider Uri的临时访问权限,且FileProvider的路径配置未匹配存储目录

解决步骤

1. 修正Uri转File的逻辑

// 先将数据库中存储的Uri字符串解析为Uri对象
val originalUri = Uri.parse(uri.uri)
// 取Uri的真实路径构造File对象
val imageFile = File(requireNotNull(originalUri.path))
// 生成FileProvider授权Uri
val photoURI = FileProvider.getUriForFile(
    context,
    "com.sudharsanravikumar.myapplication.provider",
    imageFile
)
// 给桌面启动器授予临时读权限,否则桌面组件进程无法访问图片
context.grantUriPermission(
    context.packageManager.getLauncherPackageName(),
    photoURI,
    Intent.FLAG_GRANT_READ_URI_PERMISSION
)
views.setImageViewUri(R.id.img_1, photoURI)

2. 配置FileProvider

首先在AndroidManifest.xml的<application>节点下添加Provider声明:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.sudharsanravikumar.myapplication.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

在res/xml目录下新建file_paths.xml文件,配置你存储图片的目录路径:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 匹配外部媒体目录下的应用专属路径下的AlbumExpo子目录 -->
    <external-media-path
        name="album_expo"
        path="AlbumExpo/" />
</paths>

内容的提问来源于stack exchange,提问作者barryalan2633

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:15:03