fix: 息屏时停止电量/蓝牙/信号监听,亮屏时恢复
监听SCREEN_OFF/SCREEN_ON,息屏后注销所有广播接收器和信号监听, 亮屏后重新注册。息屏后只剩MQTT心跳,与旧版耗电一致。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,7 @@ import javax.inject.Singleton
|
|||||||
/**
|
/**
|
||||||
* 系统状态监听器
|
* 系统状态监听器
|
||||||
* 注册 BroadcastReceiver 监听电量、蓝牙状态变化,通过 EventBus 分发事件
|
* 注册 BroadcastReceiver 监听电量、蓝牙状态变化,通过 EventBus 分发事件
|
||||||
|
* 息屏时自动停止监听(省电),亮屏时恢复
|
||||||
*
|
*
|
||||||
* 使用方式:
|
* 使用方式:
|
||||||
* - MainActivity.onCreate 中调用 register()
|
* - MainActivity.onCreate 中调用 register()
|
||||||
@@ -55,7 +56,7 @@ class SystemStateMonitor @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 广播接收器 */
|
/** 状态广播接收器(电量、蓝牙) */
|
||||||
private val receiver = object : BroadcastReceiver() {
|
private val receiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
when (intent.action) {
|
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() {
|
fun register() {
|
||||||
if (registered) return
|
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 {
|
val filter = IntentFilter().apply {
|
||||||
addAction(Intent.ACTION_BATTERY_CHANGED)
|
addAction(Intent.ACTION_BATTERY_CHANGED)
|
||||||
addAction(BluetoothAdapter.ACTION_STATE_CHANGED)
|
addAction(BluetoothAdapter.ACTION_STATE_CHANGED)
|
||||||
@@ -83,29 +130,27 @@ class SystemStateMonitor @Inject constructor(
|
|||||||
}
|
}
|
||||||
context.registerReceiver(receiver, filter)
|
context.registerReceiver(receiver, filter)
|
||||||
|
|
||||||
// 注册信号强度监听
|
|
||||||
val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
||||||
telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)
|
telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)
|
||||||
|
|
||||||
registered = true
|
monitoring = true
|
||||||
Timber.d("系统状态监听: 已注册")
|
Timber.d("系统状态监听: 亮屏恢复")
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 取消注册 */
|
/** 停止状态监听(息屏时调用) */
|
||||||
fun unregister() {
|
private fun pauseMonitoring() {
|
||||||
if (!registered) return
|
if (!monitoring) return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
context.unregisterReceiver(receiver)
|
context.unregisterReceiver(receiver)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.w(e, "系统状态监听: 取消注册异常")
|
Timber.w(e, "系统状态监听: 停止监听异常")
|
||||||
}
|
}
|
||||||
// 取消信号监听
|
|
||||||
val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
|
||||||
telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)
|
telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)
|
||||||
|
|
||||||
registered = false
|
monitoring = false
|
||||||
Timber.d("系统状态监听: 已取消注册")
|
Timber.d("系统状态监听: 息屏暂停")
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 上次电量百分比(去抖用) */
|
/** 上次电量百分比(去抖用) */
|
||||||
|
|||||||
Reference in New Issue
Block a user