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

TelecomManager.endCall()方法已废弃,求拒接原生电话的替代方案

替代TelecomManager.endCall()的方案

从Android 10(API 29)开始,TelecomManager.endCall()被标记为过时,官方推荐使用带callId参数的endCall(String callId)方法。以下是具体实现步骤和代码:

1. 申请必要权限

在AndroidManifest.xml中声明所需权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<!-- Android 13及以上需添加,确保通话状态监听正常工作 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

这些属于危险权限,需要在运行时动态申请。

2. 监听通话状态获取callId

要结束通话必须先获取当前通话的callId,通过注册CallStateListener监听状态变化:

private String mCurrentCallId;

// 初始化TelecomManager并注册监听
TelecomManager telecomManager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
if (telecomManager != null) {
    telecomManager.addCallStateListener(new TelecomManager.CallStateListener() {
        @Override
        public void onCallStateChanged(int state, String callId) {
            // 电话响铃或接通时保存callId
            if (state == TelecomManager.CALL_STATE_RINGING || state == TelecomManager.CALL_STATE_OFFHOOK) {
                mCurrentCallId = callId;
            } else if (state == TelecomManager.CALL_STATE_IDLE) {
                // 通话结束后清空callId
                mCurrentCallId = null;
            }
        }
    }, Executors.newSingleThreadExecutor());
}

3. 调用新方法结束通话

根据系统版本选择对应实现:

public void endCurrentCall() {
    TelecomManager telecomManager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
    if (telecomManager == null || mCurrentCallId == null) {
        return;
    }

    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            // Android 10及以上使用带callId的endCall方法
            telecomManager.endCall(mCurrentCallId);
        } else {
            // 兼容Android 9及以下,使用过时方法
            telecomManager.endCall();
        }
    } catch (SecurityException e) {
        // 处理权限不足异常,比如提示用户授权
        e.printStackTrace();
    }
}

注意事项

  • 必须确保应用已获得所有必要的运行时权限,否则会抛出SecurityException。
  • 如果是系统签名的内部测试应用,可获得更高权限,简化权限申请流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:40:15