环境模式是内置于 Google TV 和 Android TV 的屏幕保护程序。其目的是避免长时间显示静态图像。这对于 OLED 等显示技术很重要,因为这些技术容易出现屏幕烧屏。
在用户 10 分钟未活动后,操作系统会将设备置于环境模式。在用户进一步未活动一段时间(由设备省电设置定义)后,操作系统将进入省电模式,关闭显示屏。媒体播放应用可能会阻止设备进入环境模式,即使用户没有与之交互,例如观看电影时。
如果用户在进入环境模式后 30 分钟内与设备交互,则会在进入环境模式时处于活动状态的应用将被恢复。如果用户在进入环境模式 30 分钟后与设备交互,他们将返回主屏幕。当用户使用电源按钮启动处于省电模式的设备时,他们将进入主屏幕。或者,如果用户使用特定应用按钮(例如 YouTube)在省电模式下启动设备,他们将直接进入该应用。
如果您正在使用MediaSession
进行媒体播放,则在开始播放时它将持有隐式部分唤醒锁。暂停播放不会释放此唤醒锁。这意味着设备可能会自动进入环境模式,但随后不会进入省电模式。如果用户在进入环境模式后 30 分钟内与设备交互,您的应用将被恢复。
视频播放
对于视频播放,重要的是要防止设备在用户启动的播放过程中进入环境模式,以提供不间断的观看体验。但是,应用不应在停止或暂停播放时阻止设备进入环境模式。
音频播放
对于音频播放,应用不应在播放过程中阻止环境模式,除非它们实现了具有非静态图像的自己的屏幕保护程序。在环境模式处于活动状态时,音频播放将继续。
Android 上的音频播放将隐式地持有部分唤醒锁。这不会阻止设备进入环境模式,但会阻止随后过渡到省电模式。因此,即使设备进入环境模式后,播放也会继续,但会阻止设备进入睡眠状态,以允许不间断播放。
阻止环境模式
可以阻止操作系统将设备置于环境模式,但这必须符合环境模式要求。应用开发者无法阻止设备进入省电模式。
应用可以通过在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);