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

Android应用向WhatsApp发送音频文件失败问题求助

Android向WhatsApp发送音频文件失败:"Failed to share. Please try again" 问题排查与修复

核心问题定位

从你的代码和描述来看,导致发送失败的主要原因集中在Intent配置错误、文件路径不规范、权限授予不明确这几个点上,下面逐一拆解并给出修复方案:


1. Intent配置错误:重复设置Type + 错误指定应用

你连续调用了两次setType(),第二次的audio/mp3会覆盖第一次错误的com.whatsapp,但如果要指定仅分享到WhatsApp,正确的做法是用setPackage()而非错误的setType("com.whatsapp")。同时需要明确授予Uri的读取权限。

2. 文件路径问题:目录名称不一致 + 废弃API使用

copyFiletoExternalStorage中创建目录用的是/Android/data/myProject/,但实际保存路径是/Android/data/TeLoResumoBotonera/,目录名称不匹配;另外Environment.getExternalStorageDirectory()在Android 10及以上已被废弃,应改用应用专属外部存储目录,无需额外权限。

3. FileProvider路径配置可能不匹配

需要确保provider_paths.xml的配置与实际文件保存目录对应,否则FileProvider无法生成有效Uri。


修复后的完整代码

按钮点击事件修改

btn1.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view) {
        try {
            String mediaPath = copyFiletoExternalStorage(R.raw.audio1, "audio1.mp3");
            File myFile = new File(mediaPath);
            Uri newUri = getUriForFile(wspActivity.this, "com.restart.shareaudiofiles.fileprovider", myFile);
            
            Intent compartirAudio = new Intent(android.content.Intent.ACTION_SEND);
            compartirAudio.setType("audio/mp3");
            // 指定仅分享到WhatsApp
            compartirAudio.setPackage("com.whatsapp");
            compartirAudio.putExtra(Intent.EXTRA_STREAM, newUri);
            // 明确授予Uri读取权限
            compartirAudio.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            
            startActivity(compartirAudio);
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "Whatsapp no se encuentra instalado", Toast.LENGTH_LONG).show();
        }
    }
});

文件复制方法修改

private String copyFiletoExternalStorage(int resourceId, String resourceName){
    // 使用应用专属外部存储目录,无需额外存储权限
    File appExternalDir = getExternalFilesDir(null);
    if (appExternalDir == null) {
        return "";
    }
    String pathSDCard = new File(appExternalDir, resourceName).getAbsolutePath();
    
    try{
        InputStream in = getResources().openRawResource(resourceId);
        FileOutputStream out = new FileOutputStream(pathSDCard);
        byte[] buff = new byte[1024];
        int read = 0;
        try {
            while ((read = in.read(buff)) > 0) {
                out.write(buff, 0, read);
            }
        } finally {
            in.close();
            out.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return pathSDCard;
}

FileProvider路径配置(res/xml/provider_paths.xml)

确保配置指向应用专属外部存储目录:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 对应getExternalFilesDir(null)的路径 -->
    <external-files-path name="external_files" path="."/>
</paths>

额外排查建议

  • 确认音频文件完整性:通过文件管理器查看Android/data/你的应用包名/files/下的audio1.mp3是否存在且能正常播放。
  • 排除WhatsApp自身问题:暂时移除setPackage("com.whatsapp"),用系统分享选择器测试其他应用(如微信、邮件)是否能正常接收音频。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:05:20