环境模式是 Google TV 和 Android TV 中内置的屏幕保护程序。其目的是避免长时间显示静态图像。这对于 OLED 等可能容易出现屏幕灼伤的显示技术而言非常重要。
在用户不活动 10 分钟后,操作系统会将设备置于环境模式。在进一步的用户不活动期(由设备的节能设置定义)后,操作系统将进入节能模式,关闭显示屏。媒体播放应用可能会阻止设备进入环境模式,即使在用户不与其互动的情况下,例如在观看电影时。
如果在进入环境模式后 30 分钟内用户与设备互动,则进入环境模式时处于活动状态的应用将恢复。如果用户在进入环境模式 30 分钟后才与设备互动,则他们将返回主屏幕。当用户在节能模式下使用电源按钮启动设备时,他们将进入主屏幕。或者,如果用户在节能模式下使用特定的应用按钮(例如 YouTube)启动设备,他们将直接进入该应用。
如果您使用 MediaSession
进行媒体播放,它将在播放开始时持有一个隐式的 partial wake lock。暂停播放不会释放此唤醒锁。这意味着设备可能会自动进入环境模式,但随后不会进入节能模式。如果在进入环境模式后 30 分钟内用户与设备互动,您的应用将恢复。
视频播放
对于视频播放,务必在用户发起的播放期间阻止设备进入环境模式,以提供不间断的观看体验。但是,当播放停止或暂停时,应用不应阻止设备进入环境模式。
音频播放
对于音频播放,应用在播放期间不应阻止环境模式,除非它们实现了自己的带有非静态图像的屏幕保护程序。在环境模式处于活动状态时,音频播放将继续。
Android 上的音频播放将隐式持有一个 partial wake lock。这不会阻止设备进入环境模式,但会阻止随后转换到节能模式。因此,即使设备进入环境模式后,播放仍将继续,但设备将不会进入睡眠状态,以允许不间断播放。
阻止环境模式
可以阻止操作系统将设备置于环境模式,但这必须符合环境模式要求。应用开发者无法阻止设备进入节能模式。
应用可以通过在 Window
上设置标志来防止屏幕关闭
Kotlin
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
Java
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
设置此标志后,环境模式将被禁用。要重新启用它,您必须清除该标志
Kotlin
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
Java
requireActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);