Android中FLAG_SHOW_WHEN_LOCKED已废弃,旧代码在新手机上失效求助
解决FLAG_SHOW_WHEN_LOCKED废弃后新款机型失效问题
在Android 10(API 29)及以上版本中,WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED已被官方废弃,你原来的代码在新款智能手机上会失效,以下是官方推荐的替代实现:
步骤1:配置必要权限
在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
如果需要保持屏幕常亮,可额外添加WAKE_LOCK权限(也可用FLAG_KEEP_SCREEN_ON替代,二选一即可):
<uses-permission android:name="android.permission.WAKE_LOCK" />
步骤2:替换废弃API的代码
直接在Activity的onCreate方法中替换原来的flags代码:
// 替代FLAG_SHOW_WHEN_LOCKED和FLAG_TURN_SCREEN_ON,实现锁屏显示并点亮屏幕 setShowWhenLocked(true); setTurnScreenOn(true); // 替代FLAG_DISMISS_KEYGUARD,触发屏幕解锁流程 KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); if (keyguardManager.isKeyguardLocked()) { keyguardManager.requestDismissKeyguard(this, new KeyguardManager.KeyguardDismissCallback() { @Override public void onDismissError() { // 解锁失败时的处理逻辑,比如提示用户 } @Override public void onDismissSucceeded() { // 解锁成功后的操作 } @Override public void onDismissCancelled() { // 用户取消解锁时的处理 } }); } // 保持屏幕常亮,替代原来的FLAG_KEEP_SCREEN_ON getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 或者使用WakeLock方式(需WAKE_LOCK权限): // PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); // PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyApp:KeepScreenOn"); // wakeLock.acquire(10*60*1000L); // 指定持有时长,避免一直占用资源
注意事项
- 新方法
setShowWhenLocked和setTurnScreenOn是Android 10+的官方标准,无需额外权限即可实现锁屏显示 requestDismissKeyguard无法强制解锁,必须用户确认,这是系统安全机制限制- 若APP目标SDK版本≥29,必须使用上述新API,旧的FLAG参数会被系统忽略
内容的提问来源于stack exchange,提问作者Julio
相关产品推荐
相关产品推荐

