CallSDK Android 接⼊⽂档

概述

CallSDK 是一款 Android 通话 SDK,提供通话初始化、拨号、通话控制(挂点/ 静音 / 扬声器 / DTMF)、外显号码配置等核心功能。

核心特性

  • 支持音频通话(SIP 协议)
  • 外显号码组 / 号码配置
  • 通话状态监听( 接听 / 挂断 )
  • 通话控制(静音、扬声器、DTMF 发送)

环境准备

依赖配置

权限声明
在 AndroidManifest.xml 中添加必要权限:
<!-- 网络权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 音频/通话权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
注意,RECORD_AUDIO 需要动态申请,没有权限拨打会失败
依赖引入
方式 1:Gradle 依赖(推荐)在项目根目录 build.gradle 中添加仓库:
allprojects { repositories { maven { url "" } google() jcenter() } }
在模块 build.gradle 中添加依赖:
android { dependencies { implementation(name: 'useasy_callsdk', ext: 'aar') }
方式 2:本地 Jar/AAR 引入
  1. 将 callsdk-1.0.0.aar 拷贝至 app/libs 目录
  2. 在模块 build.gradle 中配置:
android { repositories { flatDir { dirs 'libs' } } } dependencies { implementation(name: 'callsdk-1.0.0', ext: 'aar') }

快速集成

初始化 SDK

// 1. 配置 SDK 参数 val sdkConfig = SDKConfig.Builder() .setUsername("your_username") // 登录用户名 .setPassword("your_password") // 登录密码 .setEnableLog(true) // 是否开启日志 .build() // 2. 初始化 SDK CallSDK.init( context = applicationContext, config = sdkConfig, object : InitListener { override fun onInitSuccess() { // 初始化成功(含登录成功) } override fun onInitFailed(errorMsg: String?) { // 初始化失败 } override fun onKicked() { // 账号被踢下线 } } )

拨打电话

CallSDK.makeCall( context = this, phoneNumber = "", // 被叫号码 object : CallStateListener { override fun onDisconnected() { // 通话断开 } override fun onCallFailed(callId: String?) { // 通话失败 } override fun onCallAnswered(callId: String?) { // 通话接听 } override fun onCallProceeding(callId: String?) { // 通话中 } override fun onCallReleased(callId: String?) { // 通话挂断 } override fun onDtmfReceived(callId: String?, dtmf: Char) { // 收到 DTMF 信号 } } )

挂断电话

CallSDK.releaseCall()

发送 DTMF

// 发送单个 DTMF 信号(如:*、#、0-9) CallSDK.sendDTMF("1")

扬声器控制

// 打开/关闭扬声器 CallSDK.openLoudSpeaker(this, true) // true:打开,false:关闭 // 获取扬声器状态 val isSpeakerOn = CallSDK.isLoudSpeakerOn(this)

静音控制

// 开启/关闭静音 CallSDK.openMute(true) // true:静音,false:取消静音 // 获取静音状态 val isMute = CallSDK.isMuteOn()

查询外显号码组列表

CallSDK.queryNumberGroupList( page = 1, pageSize = 20, listener = object : NumberGroupListListener { override fun onSuccess(response: NumberGroupListResponse) { // 查询成功,response 包含号码组列表 println("外显号码组列表:${response.groups}") } override fun onFailed(errorMsg: String?) { println("查询外显号码组失败:$errorMsg") } } )

查询外显号码列表

CallSDK.queryDisplayNumberList( listener = object : DisplayNumberListListener { override fun onSuccess(numbers: List<DisplayNumber>) { // 查询成功,numbers 为外显号码列表 println("外显号码列表:$numbers") } override fun onFailed(errorMsg: String?) { println("查询外显号码失败:$errorMsg") } } )

设置座席外显号码组

与设置座席外显号码二选一使用
val agentId = "agent_10086" // 座席 ID val numberGroupId = "group_001" // 号码组 ID CallSDK.updateAgentNumberGroup( agentId = agentId, numberGroupId = numberGroupId, listener = object : AgentConfigListener { override fun onSuccess(config: AgentConfig) { // 设置成功,config 为更新后的座席配置 println("外显号码组设置成功:$config") } override fun onFailed(errorMsg: String?) { println("外显号码组设置失败:$errorMsg") } } )

设置座席自定义外显号码

与设置座席外显号码组二选一使用
CallSDK.updateAgentSelectNumber( agentId = agentId, selectNumber = selectNumber, listener = object : AgentConfigListener { override fun onSuccess(config: AgentConfig) { println("自定义外显号码设置成功:$config") } override fun onFailed(errorMsg: String?) { println("自定义外显号码设置失败:$errorMsg") } } )

查询座席配置

CallSDK.getFullAgent( agentId = agentId, listener = object : AgentConfigListener { override fun onSuccess(config: AgentConfig) { println("座席完整配置:$config") } override fun onFailed(errorMsg: String?) { println("查询座席配置失败:$errorMsg") } } )

注销登录

CallSDK.logout()

Demo

callsdk-demo.zip
7.0 MB
Demo 集成了通话 SDK,同时还有自定义的拨号盘页面以及通话页面,UI 开发可参考 Demo

拨号盘界面 DialActivity

通话界面 CallActivity

前台服务

通话开始时会创建一个前台通知用来保活

混淆配置

-keep class com.yuntongxun.ecsdk.** { *; } -keep interface com.yuntongxun.ecsdk.** { *; } -keep class com.yuntongxun.ecsdk.core.voip.** { *; } -keep class com.yuntongxun.ecsdk.ECVoIPCall$* { *; } -keep class com.useasy.callsdk.** { *; } -keep interface com.useasy.callsdk.** { *; }

常见问题

初始化失败

  • 检查用户名 / 密码是否正确
  • 检查网络连接(需联网状态)
  • 检查环境地址是否可访问

通话无声音

  • 检查录音 / 扬声器权限是否授予
  • 检查设备音量是否正常
  • 确认 openLoudSpeaker(true) 已调用
  • 检查 SIP 服务器配置是否正确

注意事项

  1. 权限处理:Android 6.0+ 需动态申请录音权限,建议在拨号前检查并申请。
  2. 日志控制:生产环境需关闭日志(enableLog(false)),避免敏感信息泄露。

版本更新日志

版本号更新时间核心更新
1.2.02025-12-15修复对端挂断电话无法收到回掉的问题通话增加前台通知,启动前台 Service
1.0.02025-11-30支持音频通话、外显号码配置、通话控制
callsdk-1.2.0.aar
6.1 MB
2025-12-15