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

target SDK降为22后ANSWER_PHONE_CALLS权限被拒绝问题咨询

问题根因

  • ANSWER_PHONE_CALLS 是Android 8.0(API Level 26)才正式新增的危险权限,API26以下系统不存在该权限定义
  • targetSdk 低于23的自动授权规则,仅覆盖API23发布时已经存在的危险权限,API23之后新增的危险权限不受该规则约束,运行在对应版本及以上设备时默认处于拒绝状态,所以即便把targetSdk降到22,运行在API26+设备上时该权限依然会返回拒绝状态。

可行解决方案

方案1:分版本适配(无额外权限弹窗,兼容性最好)

API26以下的设备无需ANSWER_PHONE_CALLS权限即可实现接听电话逻辑,你可以加版本判断分支:

  • 代码逻辑示例:
// 先判断系统版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    int res = ContextCompat.checkSelfPermission(context, Manifest.permission.ANSWER_PHONE_CALLS);
    if (res == PackageManager.PERMISSION_GRANTED) {
        // 执行接听电话逻辑
    } else {
        // 按需选择申请权限,或引导用户手动到设置页开启
    }
} else {
    // API26以下直接执行接听逻辑,无需申请该权限
    // 可通过TelecomManager或者反射ITelephony的answerRingingCall方法实现
}
  • 只需在AndroidManifest.xml中补充声明android.permission.MODIFY_PHONE_STATE权限,该权限在targetSdk22时会被系统自动授予。

方案2:手动授权适配

如果你的应用是预装应用、企业定制应用,可以申请加入系统权限白名单,ANSWER_PHONE_CALLS会在安装时自动授予;如果是普通三方应用,可以引导用户进入应用设置的权限管理页面手动开启该权限,不需要触发运行时申请弹窗。

方案3:优化权限申请体验

如果允许少量弹窗,建议将targetSdk升级到符合应用商店要求的版本(目前主流应用商店要求targetSdk不低于33),仅在首次使用通话功能时申请1次ANSWER_PHONE_CALLS权限,相比多个权限弹窗的体验影响更小,也能规避低版本targetSdk带来的其他兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:48:03