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

Android端集成Agora SDK时应用被杀如何实现呼叫邀请功能

Android端Agora视频通话进程被杀场景下的呼叫邀请实现方案

基于ConnectionService实现系统级来电拉起的接入步骤如下:

前置权限与组件配置

  • 在AndroidManifest.xml中声明所需权限:
<!-- 系统电话框架核心权限 -->
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
<!-- Android 13+ 通知与全屏来电权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
  • 注册自定义ConnectionService组件,必须添加系统级绑定权限,防止第三方应用恶意调用:
<service
    android:name=".call.AgoraCallConnectionService"
    android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
    android:exported="true">
    <intent-filter>
        <action android:name="android.telecom.ConnectionService" />
    </intent-filter>
</service>

核心逻辑实现

  • 注册电话账号到系统电信服务
    应用冷启动时获取TelecomManager系统服务实例,构建PhoneAccount对象,配置通话能力参数:必须添加CAPABILITY_SELF_MANAGED(自管理通话模式,适配第三方音视频SDK)、CAPABILITY_VIDEO_CALLING(视频通话能力标识)、CAPABILITY_SUPPORTS_VIDEO_CALLING能力位,注册成功后系统会将应用识别为合法的通话类应用,允许弹出系统级来电界面。
  • 实现自定义ConnectionService子类
    继承系统ConnectionService类,重写onCreateIncomingConnection回调方法:
    1. 从回调参数的Bundle中取出呼叫方ID、Agora频道名、令牌等呼叫参数
    2. 构建自定义Connection实例,设置初始通话状态为STATE_RINGING,绑定接听、拒接、挂断的事件回调
    3. 调用setRinging()触发系统来电界面展示,该流程不依赖应用主进程存活,由系统电信框架直接调度
  • 适配进程被杀场景的呼叫推送链路
    应用进程被杀后Agora RTM SDK的长连接会随进程销毁中断,必须搭配系统级高优先级推送通道(厂商离线推送、FCM)传递呼叫邀请:
    • 设备端收到呼叫邀请推送后,不要直接弹出应用内通知,直接调用TelecomManager.addNewIncomingCall()方法,将呼叫参数封装到Bundle中传入,系统会自动拉起对应的ConnectionService组件,触发来电流程
    • 注意:Android 12及以上版本需引导用户开启应用的全屏通知权限,否则锁屏状态下仅会显示通知栏提示,无法弹出全屏来电界面
  • 绑定通话操作逻辑
    • 用户点击接听按钮:系统回调Connection.onAnswer()方法,在该方法中初始化Agora RTC引擎、加入对应通话频道,将Connection状态更新为STATE_ACTIVE,拉起应用内通话界面即可
    • 用户点击拒接按钮:系统回调Connection.onReject()方法,向呼叫方回送拒接信令,将Connection状态更新为STATE_DISCONNECTED后调用destroy()释放资源
    • 通话结束时主动更新Connection状态为断开并销毁实例,避免占用系统电话通道资源

常见问题规避

  • ConnectionService相关回调运行在系统主线程,禁止在回调中做耗时初始化操作(比如提前初始化Agora引擎),超过5秒未响应会触发系统ANR,Agora引擎初始化放到接听回调后异步执行即可
  • 自管理通话模式下系统不会自动处理音频路由,需要自行实现听筒、扬声器、蓝牙设备的切换逻辑与音频焦点申请
  • 国内定制ROM需提前引导用户将应用加入来电权限白名单,部分厂商默认会拦截第三方应用的系统来电拉起请求
  • 进程被杀场景下推送拉起ConnectionService时会触发应用Application类的onCreate流程,注意不要在该流程中执行非必要的初始化逻辑,避免阻塞来电展示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.07 16:15:41