环境模式是 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);