Android 应用可通过 setShowWhenLocked 或窗口标志实现锁屏时直接显示界面,保持前台活跃状态而不触发系统解锁流程,适用于导航、计时、紧急服务等场景。
android 应用可通过 `setshowwhenlocked` 或窗口标志实现锁屏时直接显示界面,保持前台活跃状态而不触发系统解锁流程,适用于导航、计时、紧急服务等场景。
在 Android 开发中,当用户锁屏后再次点亮屏幕时,默认行为是强制显示锁屏界面(PIN/密码/生物识别),需完全解锁后才能回到应用。但某些场景(如驾车导航、运动计时、医疗监护)需要应用“穿透”锁屏——即屏幕亮起后立即恢复应用界面,且不暴露其他系统功能,直到用户主动退出(如按 Home 键)。这种体验与 Google Maps 导航模式一致,是系统原生支持的高级交互能力。
要实现该行为,核心在于告知系统:当前 Activity 允许在锁屏界面上方保持可见并处于 resumed 状态。自 API 27(Android 8.1)起,推荐使用 Activity.setShowWhenLocked(true) 配合 setTurnScreenOn(true):
YZTurboWebAndroid 高性能 Android WebView 容器 SDK 接入。用于在 Android 项目中集成 WebView 容器,实现: (1) WebView 预加载与复用,提升 H5 页面加载速度 (2) 离线包管理,拦截请求优先命中本地资源 (3) JS Bridge 双向通信,Na...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
} else {
window.addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
)
}
}
⚠️ 关键注意事项:
- 该功能仅在应用处于前台 Activity 时生效;若用户按 Home 键或切换到其他应用,锁屏后将恢复标准解锁流程;
- 必须确保 Activity 没有被系统回收(避免配置变更或内存压力导致重建),建议在 onCreate() 中稳定设置标志;
- 自 Android 9(API 28)起,FLAG_SHOW_WHEN_LOCKED 已被标记为 deprecated,务必优先使用 setShowWhenLocked();
- 需配合合理的唤醒策略(如 WakeLock 或 Notification 的 VISIBILITY_PUBLIC)防止设备休眠中断体验(尤其在后台持续运行场景);
- 此行为受设备厂商定制 ROM 影响(如部分华为/小米机型可能限制该标志),上线前需真机全覆盖测试。
最后需强调:此能力并非绕过安全机制,而是系统级的“专注模式”设计——用户仍无法访问通知栏、最近任务、设置等敏感区域,仅当前 Activity 可交互,符合 Android 安全模型。合理使用可显著提升特定场景下的用户体验,但切勿滥用,避免引发隐私或功耗问题。










