Android代码分享MP4到WhatsApp提示The File is not supported错误怎么解决?
你遇到的这个*文件不支持(The File is not supported)*报错,常见触发原因和修复方案如下:
触发原因
- 视频编码兼容性问题:从文件名里的
9265标识可以判断你要分享的是H.265(HEVC)编码的MP4文件,目前不少版本的WhatsApp对H.265编码的视频支持度很差,会直接判定为不支持的文件格式。 - MIME类型匹配问题:代码里用了模糊的
video/*作为媒体类型,部分版本的WhatsApp对通配符形式的MIME类型识别存在异常,无法正确识别文件格式。 - FileProvider配置错误:如果你的
provider_paths.xml没有正确配置对应沙盒路径的访问规则,就算添加了读权限标识,WhatsApp也无法正常读取你App私有目录下的视频文件,也会触发该报错。 - 文件不完整:如果视频文件还在写入过程中(比如刚下载完、刚录制完就触发分享),文件损坏或者大小为0,WhatsApp解析失败也会提示格式不支持。
修复方案
- 优先处理编码兼容性
如果业务允许,将H.265编码的视频转码为兼容性更好的H.264(AVC)编码的MP4,所有版本的WhatsApp都支持该编码格式。 - 明确指定MIME类型
不要使用通配符的video/*,直接明确指定为video/mp4,避免类型识别异常:
type = "video/mp4"
- 校验FileProvider配置
首先确认AndroidManifest.xml里的Provider配置正确:
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider>
再确认res/xml/provider_paths.xml里添加了对应私有路径的配置,匹配你存放视频的files/Download目录:
<paths> <files-path name="video_download" path="Download/" /> </paths>
- 分享前校验文件有效性
增加文件合法性判断,避免分享损坏的空文件:
private fun shareVideoToApp(context: Context, packageName: String) { sharePath?.let { path -> val file = File(path) // 新增文件校验 if (!file.exists() || file.length() <= 0) { Log.e(TAG, "Video file is invalid") return@let } startActivity(Intent().apply { action = Intent.ACTION_SEND setPackage(packageName) putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(context, context.packageName + ".provider", file)) type = "video/mp4" addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }) } ?: run { Log.e(TAG, "Path is null") } }
如果以上操作完成后还是报错,可以尝试将视频文件先拷贝到设备公共Download目录,再用公共目录的Uri进行分享,兼容性会更高。
内容的提问来源于stack exchange,提问作者Devrath
相关产品推荐
相关产品推荐

