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

Redmi安卓13设备向未保存号码发送WhatsApp商务消息的问题

解决方案:Redmi安卓13上通过代码调用WhatsApp与未保存联系人交互

一、打开未保存联系人的WhatsApp聊天窗口

你的第一段代码失效主要有两个原因:

  1. 包名匹配错误:com.whatsapp.w4b是WhatsApp商务版的包名,若你安装的是普通版WhatsApp,需改为com.whatsapp;
  2. 号码格式不规范:必须传入带国际区号的完整号码(如+8613xxxxxxxxx),仅输入纯手机号无法识别未保存联系人。

修正后的代码:

val toNumber = "+8613xxxxxxxxx" // 替换为带国际区号的目标号码
val uri = Uri.parse("smsto:$toNumber")
val intent = Intent(Intent.ACTION_SENDTO, uri).apply {
    setPackage("com.whatsapp") // 商务版请替换为com.whatsapp.w4b
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
// 先检查设备是否安装了对应版本的WhatsApp
if (packageManager.resolveActivity(intent, 0) != null) {
    startActivity(intent)
} else {
    // 处理未安装WhatsApp的异常情况
}

二、向未保存联系人发送媒体文件(图片/视频)

要发送媒体,需使用ACTION_SEND Intent,结合媒体文件的Uri,同时处理安卓13的文件访问权限限制:

步骤1:准备合法的媒体Uri

  • 若媒体是应用内部生成的文件,需通过FileProvider获取Content Uri;
  • 若访问系统相册的媒体,安卓13及以上需动态申请READ_MEDIA_IMAGES(图片)或READ_MEDIA_VIDEO(视频)权限。

步骤2:发送媒体的代码实现

val toNumber = "+8613xxxxxxxxx"
val mediaUri = Uri.parse("content://xxx/xxx") // 替换为你的媒体文件Uri

val intent = Intent(Intent.ACTION_SEND).apply {
    setPackage("com.whatsapp")
    // 核心参数:构造WhatsApp识别未保存联系人的JID
    putExtra("jid", "${toNumber.replace("+", "")}@s.whatsapp.net")
    putExtra(Intent.EXTRA_STREAM, mediaUri)
    type = "image/*" // 图片用image/*,视频用video/*,通用类型用*/*
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    // 必须添加此标记,允许WhatsApp读取你的文件Uri
    addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}

if (packageManager.resolveActivity(intent, 0) != null) {
    startActivity(intent)
}

额外说明:

  • 若要同时发送文本+媒体,可添加putExtra(Intent.EXTRA_TEXT, "你的文本内容");
  • jid参数是识别未保存联系人的关键,格式必须为去掉+号的纯号码@s.whatsapp.net。

三、通用注意事项

  1. 安卓13权限:访问系统媒体需提前动态申请对应权限,否则无法获取合法的媒体Uri;
  2. 号码验证:所有场景下必须使用带国际区号的完整号码,否则WhatsApp无法匹配未保存联系人;
  3. 版本兼容:确保设备上的WhatsApp是最新版本,旧版本可能不支持部分Intent参数。

内容的提问来源于stack exchange,提问作者Sabena yasmin P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:23:29