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

Android平台从自有应用发起WhatsApp通话的代码实现问询

在Android应用中发起WhatsApp通话的实现方案

嘿,你说的完全没错!既然系统联系人里能触发WhatsApp通话,那咱们自己的App肯定也能做到。我给你整理了两种经过验证的实现方式,直接就能上手用:

方法一:使用WhatsApp官方URI Scheme(推荐)

这是WhatsApp官方认可的唤起方式,兼容性最好,不需要额外权限(除了正常的启动Activity权限)。

代码示例(Kotlin):

fun launchWhatsAppCall(context: Context, phoneNumber: String) {
    // 先格式化号码:去掉空格、括号等特殊字符,必须带正确的国家码(比如+86)
    val cleanNumber = phoneNumber.replace("[^0-9+]".toRegex(), "")
    val callUri = Uri.parse("whatsapp://call?phone=$cleanNumber")

    val intent = Intent(Intent.ACTION_VIEW, callUri)
    // 指定包名,确保只唤起WhatsApp,不会弹出选择器
    intent.setPackage("com.whatsapp")

    if (intent.resolveActivity(context.packageManager) != null) {
        context.startActivity(intent)
    } else {
        // 处理WhatsApp未安装的情况
        Toast.makeText(context, "请先安装WhatsApp应用", Toast.LENGTH_SHORT).show()
    }
}

如果用Java开发,逻辑完全一致,只需要调整语法即可。

方法二:模仿系统联系人的Intent调用

系统联系人里的「通过WhatsApp呼叫」本质是用了拨号Intent结合WhatsApp的包名,这种方式也能生效,但需要注意权限问题。

代码示例(Kotlin):

fun startWhatsAppCallViaDial(context: Context, phoneNumber: String) {
    val cleanNumber = phoneNumber.replace("[^0-9+]".toRegex(), "")
    val telUri = Uri.parse("tel:$cleanNumber")

    val intent = Intent(Intent.ACTION_CALL)
    intent.data = telUri
    intent.setPackage("com.whatsapp")
    // 部分版本需要指定MIME类型来匹配WhatsApp的通话入口
    intent.type = "vnd.android.cursor.item/vnd.com.whatsapp.voip.call"

    // 注意:ACTION_CALL需要CALL_PHONE权限,Android 6.0+必须动态申请
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
        if (intent.resolveActivity(context.packageManager) != null) {
            context.startActivity(intent)
        } else {
            Toast.makeText(context, "请先安装WhatsApp应用", Toast.LENGTH_SHORT).show()
        }
    } else {
        // 动态申请CALL_PHONE权限
        ActivityCompat.requestPermissions(context as Activity, arrayOf(Manifest.permission.CALL_PHONE), 1001)
    }
}

关键注意点:

  • 号码格式:必须包含正确的国家码(比如中国手机号要写成+8613xxxxxxxxx),否则WhatsApp无法定位到对应的联系人。
  • 权限替代:如果不想申请CALL_PHONE权限,可以把ACTION_CALL换成ACTION_DIAL,这样只会打开WhatsApp的拨号界面,用户手动点击呼叫即可,无需权限。
  • 版本适配:两种方法都适配绝大多数WhatsApp版本,但建议在不同Android版本的设备上测试验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:04