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

自定义来电界面如何实现接听、挂断通话的按钮功能

自定义来电界面接听/挂断通话功能实现方案

以下按Android、iOS两个主流平台分别给出实现逻辑:

Android 平台

前置要求

首先需要在AndroidManifest.xml中声明对应权限,且完成动态权限申请,获取用户授权后功能才能正常生效:

  • android.permission.ANSWER_PHONE_CALLS:Android 8.0及以上版本接听、挂断通话必备权限
  • android.permission.READ_PHONE_STATE:读取当前通话状态必备权限
  • android.permission.CALL_PHONE:Android 8.0以下版本兼容用权限

接听通话实现

Android 8.0+ 直接调用系统TelecomManager提供的公开API即可:

// Kotlin 示例代码
val telecomManager = getSystemService(Context.TELECOM_SERVICE) as TelecomManager
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ANSWER_PHONE_CALLS) == PackageManager.PERMISSION_GRANTED) {
    telecomManager.acceptRingingCall()
}

Android 8.0以下低版本需要通过反射调用ITelephony类的answerRingingCall方法做兼容。

挂断通话实现

Android 10+ 直接调用TelecomManager公开API:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ANSWER_PHONE_CALLS) == PackageManager.PERMISSION_GRANTED) {
    telecomManager.endCall()
}

Android 10以下低版本同样通过反射调用ITelephony类的endCall方法做兼容。

注意事项

  • 多数国产定制ROM对通话权限有额外管控,可能需要引导用户在系统设置中手动开启应用的通话相关权限,否则API调用会无返回结果。
  • 自定义界面操作后需要监听系统通话状态变化,同步更新UI,避免出现界面和系统实际通话状态不一致的异常。

iOS 平台

iOS系统对通话相关权限管控极严格,没有公开API支持第三方应用控制系统普通来电的接听、挂断动作,仅两种场景可实现对应功能:

  • 如果你开发的是VoIP类应用,通过PushKit + CallKit框架实现自有通话业务,直接调用CallKit框架的对应方法即可:
    • 接听通话:执行CXAnswerCallAction
    • 挂断通话:执行CXEndCallAction
  • 如果是要拦截系统普通来电展示自定义界面,仅越狱设备可通过调用私有API实现,该方案无法通过App Store审核,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:45:05