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

使用Android Intent(Java)向WhatsApp等应用分享视频的问题求助

问题根因

  • Android 7.0(API 24)以上禁止直接向第三方应用暴露本地文件路径,未授权的Uri会被目标应用识别为无效资源
  • Android 10(API 29)及以上废弃了MediaStore.Video.Media.DATA字段,你直接插入硬编码路径生成的Uri不符合系统规范,WhatsApp无法正常读取对应视频
  • 你的分享Intent没有为目标应用授予临时读取权限,第三方应用无权访问你生成的媒体资源

修复方案

第一步:配置FileProvider(未配置的情况下)

首先在AndroidManifest.xml中添加FileProvider声明:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    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">
    <external-path name="external_files" path="." />
</paths>

第二步:修改分享逻辑代码

// 首先获取目标视频文件
File videoFile = new File("/storage/emulated/0/WhatsApp/Media/WhatsApp Video/VID-20210822-WA0002.mp4");
// 用FileProvider生成合规的共享Uri
Uri videoUri = FileProvider.getUriForFile(getBaseContext(), getPackageName() + ".fileprovider", videoFile);

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
// 明确指定MIME类型为video/mp4,避免通配符匹配错误
sharingIntent.setType("video/mp4");
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Title");
sharingIntent.putExtra(Intent.EXTRA_STREAM, videoUri);
// 给目标应用授予临时读取Uri的权限
sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(sharingIntent, "share:"));

额外注意事项

  • 如果你的应用适配Android 13及以上,需要提前申请READ_MEDIA_VIDEO权限,否则无法读取本地视频文件
  • 分享前可以先判断目标视频文件是否存在、是否有读取权限,避免无效分享
  • 不要使用video/*通配符作为MIME类型,明确指定为对应视频格式的MIME类型可以大幅提升第三方应用的兼容性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:03