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

API 35与API 36中Android返回键行为差异问题

API 35与API 36中Android返回键行为差异问题

老哥,太懂你这种老代码突然“罢工”的憋屈了!用了好几年的返回键逻辑,升级到API 36就出问题,搁谁都得挠头。先帮你把没写完的代码补全(应该是这样吧?):

override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
    if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
        webView.goBack()
        return true
    }
    // 如果不是返回键或者WebView无法返回,交给系统默认处理
    return super.onKeyDown(keyCode, event)
}

为啥API 36里这逻辑不好使了?其实从Android 13(API 33)开始,系统就对返回键的处理逻辑做了调整,到API 36(Android 14)更是强化了预测式返回手势的优先级,老的onKeyDown方法处理返回键的优先级被降低了,甚至可能被系统的新机制拦截。

给你两个靠谱的解决方案:

  • 方案一:迁移到官方推荐的OnBackPressedCallback(强烈推荐)
    这是API 30之后官方主推的返回键处理方式,能完美适配新系统的返回手势,不会被拦截。代码示例:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.your_layout)
        
        // 初始化你的WebView
        val webView = findViewById<WebView>(R.id.webView)
        // ...其他WebView配置
        
        // 创建返回键回调
        val backCallback = object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                if (webView.canGoBack()) {
                    // WebView有历史记录时返回上一页
                    webView.goBack()
                } else {
                    // 没有历史记录时,触发系统默认返回行为
                    isEnabled = false
                    onBackPressedDispatcher.onBackPressed()
                    isEnabled = true
                }
            }
        }
        // 将回调添加到返回键分发器
        onBackPressedDispatcher.addCallback(this, backCallback)
    }
    
  • 方案二:继续用onKeyDown的兼容处理
    如果暂时不想大改代码,可以检查下你的Manifest配置:如果在Activity标签里设置了android:enableOnBackInvokedCallback="true"(API 33+默认开启),这个属性会让系统优先处理返回事件,导致onKeyDown接不到返回键信号。你可以尝试暂时关闭这个属性,但不推荐长期这么做,毕竟这是系统的新特性,用户体验会更好。

总之,还是建议尽快迁移到OnBackPressedCallback,不仅能解决当前的问题,还能适配后续Android版本的更新,避免再踩类似的坑。

备注:内容来源于stack exchange,提问作者GenAndroidDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:39:52