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

Android应用向WhatsApp发送视频:已实现文本发送,无法发送媒体文件

Android应用向WhatsApp发送图片/视频解决方案

你当前使用ACTION_VIEW配合WhatsApp Web API的方式仅支持文本消息,要发送图片或视频,需要使用ACTION_SEND/ACTION_SEND_MULTIPLE Intent,并适配Android 7.0+的文件访问规则(使用Content URI)。以下是具体实现步骤:

1. 配置FileProvider(Android 7.0及以上必填)

首先在AndroidManifest.xml中注册FileProvider,用于安全共享文件URI:

<application>
    <!-- 其他原有配置 -->
    <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>
</application>

接着在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="."/>
    <!-- 若媒体存在应用内部存储,可添加<files-path name="internal_files" path="."/> -->
</paths>

2. 发送单张图片/单个视频

private void sendSingleMediaToWhatsApp(String phone, File mediaFile) {
    try {
        String whatsAppPackage = "com.whatsapp";
        // 构建WhatsApp目标用户JID,格式为「带国家代码的号码@s.whatsapp.net」
        String targetJid = phone + "@s.whatsapp.net";

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setPackage(whatsAppPackage);
        sendIntent.putExtra("jid", targetJid);
        // 设置媒体文件的Content URI
        sendIntent.putExtra(Intent.EXTRA_STREAM, getMediaFileUri(mediaFile));
        // 根据文件类型设置MIME:图片用image/*,视频用video/*
        String mimeType = mediaFile.getName().toLowerCase().endsWith(".mp4") ? "video/*" : "image/*";
        sendIntent.setType(mimeType);

        startActivity(sendIntent);
    } catch (Exception e) {
        Toast.makeText(this, "WhatsApp未安装或发送失败", Toast.LENGTH_SHORT).show();
    }
}

// 获取适配Android版本的文件URI
private Uri getMediaFileUri(File file) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", file);
    } else {
        return Uri.fromFile(file);
    }
}

3. 发送多张图片/视频

如果需要批量发送媒体文件,使用ACTION_SEND_MULTIPLE:

private void sendMultipleMediaToWhatsApp(String phone, ArrayList<File> mediaFiles) {
    try {
        String whatsAppPackage = "com.whatsapp";
        String targetJid = phone + "@s.whatsapp.net";
        ArrayList<Uri> mediaUris = new ArrayList<>();

        for (File file : mediaFiles) {
            mediaUris.add(getMediaFileUri(file));
        }

        Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
        sendIntent.setPackage(whatsAppPackage);
        sendIntent.putExtra("jid", targetJid);
        sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, mediaUris);
        // 混发图片和视频时可设置为"*/*",单一类型则对应设置image/*或video/*
        sendIntent.setType("*/*");

        startActivity(sendIntent);
    } catch (Exception e) {
        Toast.makeText(this, "WhatsApp未安装或发送失败", Toast.LENGTH_SHORT).show();
    }
}

关键注意事项

  • 电话号码必须包含完整国家代码(如+8613xxxxxxxxx),不能有空格或特殊字符
  • 确保拥有媒体文件的读取权限:Android 10+建议将文件存放在应用私有目录,或申请MANAGE_EXTERNAL_STORAGE权限
  • 测试前确认目标号码已注册WhatsApp,且设备上已安装WhatsApp应用

内容的提问来源于stack exchange,提问作者Bhaskar Jyoti Dutta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44