You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wear OS 5环境模式/屏幕关闭检测:原DisplayListener失效求助

问题

我有一个ComplicationDataSourceService,需要在手表进入环境模式或屏幕关闭时收到通知。该服务用于实现一款「手电筒」complication:点击开启时渲染纯白画面,关闭时不渲染任何内容。若手电筒开启时手表进入环境模式或屏幕关闭,我希望手电筒自动关闭,且唤醒后保持关闭状态。

在Wear OS 5之前,我通过DisplayListener.onDisplayChanged实现该功能,但Wear OS 5中无论targetSdkVersion设为33还是34,该方法都不再被调用。请问是否有其他方式获取环境模式/屏幕关闭的回调,或如何重新实现DisplayListener.onDisplayChanged?

附原实现代码:

displayListener = object : DisplayManager.DisplayListener {
    override fun onDisplayChanged(displayId: Int) {
        val isStateAmbient = displayManager.getDisplay(displayId).state != Display.STATE_ON
        // ...
    }
}.also {
    displayManager.registerDisplayListener(it, Handler(Looper.getMainLooper()))
}
解决方案

在Wear OS 5中,DisplayListener的回调逻辑确实有调整,你可以改用以下两种方式实现需求:

1. 使用AmbientModeSupport监听环境模式变化

官方推荐用AmbientModeSupport监听Wear OS的环境模式状态,它能精准捕获环境模式的进入/退出、屏幕开关状态:

// 在ComplicationDataSourceService中初始化监听
val ambientCallback = object : AmbientModeSupport.AmbientCallback() {
    override fun onEnterAmbient(ambientDetails: Bundle?) {
        // 进入环境模式,关闭手电筒
        turnOffFlashlight()
    }

    override fun onExitAmbient() {
        // 退出环境模式,保持关闭状态(无需额外操作)
    }

    override fun onUpdateAmbient() {
        // 环境模式下的更新回调,此处无需处理
    }
}

// 注册回调
AmbientModeSupport.attach(this, ambientCallback)

注意:确保build.gradle中已引入com.google.android.gms:play-services-wearable依赖。

2. 使用PowerManager监听屏幕状态

如果需要更直接的屏幕关闭/唤醒通知,可以用PowerManager的PowerStateListener:

val powerManager = getSystemService(POWER_SERVICE) as PowerManager
val powerStateListener = PowerManager.PowerStateListener { powerState ->
    val isScreenOff = !powerState.isInteractive
    if (isScreenOff) {
        // 屏幕关闭,关闭手电筒
        turnOffFlashlight()
    }
}

// 注册监听
powerManager.addPowerStateListener(powerStateListener)

// 服务销毁时移除监听,避免内存泄漏
override fun onDestroy() {
    super.onDestroy()
    powerManager.removePowerStateListener(powerStateListener)
}

这种方式能直接获取屏幕交互状态,屏幕从亮转暗(包括进入环境模式或完全关闭)时都会触发回调。

额外注意事项

  • 屏幕状态监听无需额外权限,若涉及唤醒锁操作需申请WAKE_LOCK权限。
  • 服务销毁时务必移除所有监听,防止内存泄漏。

内容的提问来源于stack exchange,提问作者rjr-apps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:12:09