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

如何处理API27废弃的FLAG_SHOW_WHEN_LOCKED?兼容minSdk21与targetSdk33

解决FLAG_SHOW_WHEN_LOCKED等API废弃警告的兼容方案

你遇到的警告是因为else分支里的FLAG_DISMISS_KEYGUARD、FLAG_SHOW_WHEN_LOCKED、FLAG_TURN_SCREEN_ON在API27及以上已被标记为废弃,哪怕加了版本判断,编译器还是会提示这些常量已废弃。下面是两种可行的解决办法:

方法一:用注解忽略废弃警告

直接在包含废弃代码的代码块或函数上添加@Suppress("DEPRECATION")注解,让编译器跳过该部分的废弃警告。修改后的代码示例:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { // O_MR1对应API27,用常量更易读
    setShowWhenLocked(true)
    setTurnScreenOn(true)
} else {
    @Suppress("DEPRECATION")
    window.addFlags(
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    )
}

如果这段代码是在单独的函数里,也可以把注解加在函数上:

@Suppress("DEPRECATION")
fun setupWindowForLockScreen() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setShowWhenLocked(true)
        setTurnScreenOn(true)
    } else {
        window.addFlags(
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
        )
    }
}

方法二:使用AndroidX的WindowCompat工具类(推荐)

AndroidX提供了WindowCompat类,已经封装好了版本兼容逻辑,不用自己写if-else判断,也不会出现废弃警告。只要你的项目依赖了AndroidX核心库(一般新建项目默认包含),就可以直接用:

import androidx.core.view.WindowCompat

// 在Activity的onCreate方法中调用
WindowCompat.setShowWhenLocked(window, true)
WindowCompat.setTurnScreenOn(window, true)

// 如果需要自动解锁屏幕,补充以下逻辑:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val keyguardManager = getSystemService(KeyguardManager::class.java)
    keyguardManager.requestDismissKeyguard(this, null)
} else {
    @Suppress("DEPRECATION")
    window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
}

WindowCompat的方法内部会自动根据系统版本选择调用新API还是旧FLAG,代码更简洁,也不用自己维护版本判断逻辑,是官方推荐的兼容方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:55:27