diff --git a/app/src/main/java/com/xiaoqu/watch/service/manager/SystemStateMonitor.kt b/app/src/main/java/com/xiaoqu/watch/service/manager/SystemStateMonitor.kt index 5e6b30f..70aaf47 100644 --- a/app/src/main/java/com/xiaoqu/watch/service/manager/SystemStateMonitor.kt +++ b/app/src/main/java/com/xiaoqu/watch/service/manager/SystemStateMonitor.kt @@ -24,6 +24,7 @@ import javax.inject.Singleton /** * 系统状态监听器 * 注册 BroadcastReceiver 监听电量、蓝牙状态变化,通过 EventBus 分发事件 + * 息屏时自动停止监听(省电),亮屏时恢复 * * 使用方式: * - MainActivity.onCreate 中调用 register() @@ -55,7 +56,7 @@ class SystemStateMonitor @Inject constructor( } } - /** 广播接收器 */ + /** 状态广播接收器(电量、蓝牙) */ private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.action) { @@ -71,10 +72,56 @@ class SystemStateMonitor @Inject constructor( } } - /** 注册广播监听 */ + /** 屏幕开关广播接收器(控制状态监听的启停) */ + private val screenReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + when (intent.action) { + Intent.ACTION_SCREEN_OFF -> pauseMonitoring() + Intent.ACTION_SCREEN_ON -> resumeMonitoring() + } + } + } + + /** 状态监听是否活跃 */ + private var monitoring = false + + /** 注册(包含屏幕开关监听 + 启动状态监听) */ fun register() { if (registered) return + // 注册屏幕开关监听(始终活跃,不受息屏影响) + val screenFilter = IntentFilter().apply { + addAction(Intent.ACTION_SCREEN_OFF) + addAction(Intent.ACTION_SCREEN_ON) + } + context.registerReceiver(screenReceiver, screenFilter) + + // 启动状态监听 + resumeMonitoring() + + registered = true + Timber.d("系统状态监听: 已注册") + } + + /** 取消注册(清理所有监听) */ + fun unregister() { + if (!registered) return + + pauseMonitoring() + try { + context.unregisterReceiver(screenReceiver) + } catch (e: Exception) { + Timber.w(e, "系统状态监听: 取消屏幕监听异常") + } + + registered = false + Timber.d("系统状态监听: 已取消注册") + } + + /** 启动状态监听(亮屏时调用) */ + private fun resumeMonitoring() { + if (monitoring) return + val filter = IntentFilter().apply { addAction(Intent.ACTION_BATTERY_CHANGED) addAction(BluetoothAdapter.ACTION_STATE_CHANGED) @@ -83,29 +130,27 @@ class SystemStateMonitor @Inject constructor( } context.registerReceiver(receiver, filter) - // 注册信号强度监听 val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) - registered = true - Timber.d("系统状态监听: 已注册") + monitoring = true + Timber.d("系统状态监听: 亮屏恢复") } - /** 取消注册 */ - fun unregister() { - if (!registered) return + /** 停止状态监听(息屏时调用) */ + private fun pauseMonitoring() { + if (!monitoring) return try { context.unregisterReceiver(receiver) } catch (e: Exception) { - Timber.w(e, "系统状态监听: 取消注册异常") + Timber.w(e, "系统状态监听: 停止监听异常") } - // 取消信号监听 val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) - registered = false - Timber.d("系统状态监听: 已取消注册") + monitoring = false + Timber.d("系统状态监听: 息屏暂停") } /** 上次电量百分比(去抖用) */