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

使用FileProvider向Gmail分享图片时触发IllegalArgumentException错误

解决FileProvider分享图片时的根目录找不到问题

这个问题我之前处理过一模一样的情况,核心就是你的file_provider_paths.xml配置不完整(你贴的内容里<externa...明显没写完),导致FileProvider没法定位到/uploads/b056441c611b4e0a9a35.jpg所在的根目录。下面给你分步解决:

第一步:补全file_provider_paths.xml的正确配置

首先得明确你的uploads目录到底存在哪里,分两种常见情况:

情况1:uploads在外部公共存储根目录(比如SD卡根目录下的/uploads/)

把你的paths文件改成这样:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <!-- name是自定义的别名,path指定到uploads子目录 -->
    <external-path name="external_uploads" path="uploads/" />
</paths>

情况2:uploads在应用私有外部存储(比如/Android/data/staging.mytours.co/files/uploads/)

这种更推荐,因为是应用私有目录,不需要额外权限,配置改成:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path name="app_private_uploads" path="uploads/" />
</paths>

第二步:确保代码里的文件路径和配置匹配

比如如果是情况1,获取图片文件的代码应该是:

// 获取外部公共存储根目录
File uploadRoot = Environment.getExternalStorageDirectory();
// 定位到uploads目录下的目标图片
File targetImage = new File(uploadRoot, "uploads/b056441c611b4e0a9a35.jpg");

如果是情况2,用应用私有外部存储:

// 获取应用私有外部存储的files目录
File uploadRoot = getExternalFilesDir(null);
File targetImage = new File(uploadRoot, "uploads/b056441c611b4e0a9a35.jpg");

第三步:生成Uri时注意Authority一致

生成FileProvider的Uri时,要和你AndroidManifest里的android:authorities完全匹配:

Uri imageUri = FileProvider.getUriForFile(
    getApplicationContext(),
    "staging.mytours.co", // 必须和Manifest里的authorities一致
    targetImage
);

额外注意事项

  • 如果是Android 10及以上版本使用外部公共存储,需要在AndroidManifest.xml的<application>标签里添加android:requestLegacyExternalStorage="true"来兼容旧的存储方式,或者改用Scoped Storage的API。
  • 确认你的uploads目录确实存在,并且图片文件没有被删除或损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:54