From ccfa30daa685da37d050a6e02a6345596f6c29a4 Mon Sep 17 00:00:00 2001 From: dongliang Date: Mon, 11 May 2026 12:05:48 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=A1=E5=8F=B7=E6=94=B9=E4=B8=BAToas?= =?UTF-8?q?t=E6=8F=90=E7=A4=BA=E6=9C=89/=E6=97=A0=E4=BF=A1=E5=8F=B7?= =?UTF-8?q?=EF=BC=8C=E7=94=B5=E9=87=8F=E5=B9=BF=E6=92=AD=E5=8A=A0=E5=8E=BB?= =?UTF-8?q?=E6=8A=96=EF=BC=8C=E5=87=8F=E5=B0=91=E6=97=A0=E6=95=88=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 信号监听:不再实时更新状态栏,只在有/无信号翻转时Toast提示 2. 电量广播:百分比和充电状态没变就不发事件(原来每秒都触发) 3. 状态栏:移除信号条绘制 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../service/manager/SystemStateMonitor.kt | 27 ++++++++++++++----- .../com/xiaoqu/watch/ui/home/HomeFragment.kt | 18 +++++-------- .../xiaoqu/watch/ui/widget/StatusBarView.kt | 6 ++--- 3 files changed, 28 insertions(+), 23 deletions(-) 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 7b08994..5e6b30f 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 @@ -40,13 +40,18 @@ class SystemStateMonitor @Inject constructor( /** 是否已注册 */ private var registered = false - /** 信号强度监听器 */ + /** 上次信号状态(true=有信号) */ + private var lastHasSignal: Boolean? = null + + /** 信号监听器(只关心有/无信号翻转,Toast 提示用户) */ private val phoneStateListener = object : PhoneStateListener() { @Suppress("DEPRECATION") override fun onSignalStrengthsChanged(signalStrength: SignalStrength) { - // 将信号强度转换为 0-4 级 - val level = signalStrength.level // API 23+ 返回 0-4 - emitEvent(AppEvent.SignalChanged(level)) + val hasSignal = signalStrength.level > 0 + if (hasSignal != lastHasSignal) { + lastHasSignal = hasSignal + emitEvent(AppEvent.SignalChanged(if (hasSignal) 4 else 0)) + } } } @@ -103,18 +108,26 @@ class SystemStateMonitor @Inject constructor( Timber.d("系统状态监听: 已取消注册") } - /** 处理电量变化广播 */ + /** 上次电量百分比(去抖用) */ + private var lastBatteryPercent = -1 + /** 上次充电状态(去抖用) */ + private var lastIsCharging: Boolean? = null + + /** 处理电量变化广播(去抖:电量或充电状态变化才发事件) */ private fun handleBatteryChanged(intent: Intent) { - // 电量百分比 = level / scale * 100 val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0) val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100) val percent = (level * 100) / scale - // 充电状态 val status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1) val isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL + // 电量和充电状态都没变 → 不发事件 + if (percent == lastBatteryPercent && isCharging == lastIsCharging) return + lastBatteryPercent = percent + lastIsCharging = isCharging + emitEvent(AppEvent.BatteryChanged(percent, isCharging)) } diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index 8c907ca..0797801 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -350,16 +350,6 @@ class HomeFragment : BaseFragment() { val btOn = btAdapter?.isEnabled ?: false statusBar.updateBluetooth(btOn) - // 信号强度初始值(PhoneStateListener 注册后才有回调,先读一次当前值) - try { - val telephony = requireContext().getSystemService(android.content.Context.TELEPHONY_SERVICE) - as? android.telephony.TelephonyManager - val signalLevel = telephony?.signalStrength?.level ?: 0 - statusBar.updateSignal(signalLevel) - } catch (e: Exception) { - // signalStrength 可能为 null(API 28+),静默处理 - statusBar.updateSignal(0) - } } /** 初始化主页数据 */ @@ -597,9 +587,13 @@ class HomeFragment : BaseFragment() { is AppEvent.BluetoothStateChanged -> { statusBar.updateBluetooth(event.isOn) } - // 信号强度变化 + // 信号状态变化(仅有/无信号翻转时触发) is AppEvent.SignalChanged -> { - statusBar.updateSignal(event.level) + if (event.level == 0) { + Toast.makeText(requireContext(), "网络信号丢失", Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(requireContext(), "网络信号已恢复", Toast.LENGTH_SHORT).show() + } } // 蓝牙设备连接/断开 → 更新设置页 is AppEvent.BluetoothDeviceConnected -> { diff --git a/app/src/main/java/com/xiaoqu/watch/ui/widget/StatusBarView.kt b/app/src/main/java/com/xiaoqu/watch/ui/widget/StatusBarView.kt index 6b9fb9c..28bcb5d 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/widget/StatusBarView.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/widget/StatusBarView.kt @@ -45,7 +45,6 @@ class StatusBarView @JvmOverloads constructor( // ===== 左侧:蓝牙圆点 + 信号条 ===== drawBluetoothDot(canvas, 8f, centerY) - drawSignalBars(canvas, 22f, centerY) // ===== 右侧:电池图标(固定位置)+ 电量百分比(电池左侧) ===== val batteryStartX = width - 50f @@ -167,10 +166,9 @@ class StatusBarView @JvmOverloads constructor( invalidate() } - /** 更新信号强度 (0-4) */ + /** 信号已改为 Toast 提示,状态栏不再显示 */ fun updateSignal(level: Int) { - signalLevel = level.coerceIn(0, 4) - invalidate() + // 不再绘制信号条,无需 invalidate } /** 更新电池状态 */