From 6f11784b8aa02733bdf6e3612f09c714a515515e Mon Sep 17 00:00:00 2001 From: dongliang Date: Thu, 7 May 2026 13:32:25 +0930 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8E=A5=E5=85=A5=E7=9C=9F=E5=AE=9E?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7=E5=BC=BA=E5=BA=A6=E6=98=BE=E7=A4=BA=EF=BC=88?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E5=86=99=E6=AD=BB=E6=BB=A1=E6=A0=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AppEvent 新增 SignalChanged 事件 - SystemStateMonitor 注册 PhoneStateListener 监听信号强度 - HomeFragment 接收事件更新 StatusBar 信号条(0-4级) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/xiaoqu/watch/event/AppEvent.kt | 2 ++ .../service/manager/SystemStateMonitor.kt | 22 +++++++++++++++++++ .../com/xiaoqu/watch/ui/home/HomeFragment.kt | 4 ++++ 3 files changed, 28 insertions(+) diff --git a/app/src/main/java/com/xiaoqu/watch/event/AppEvent.kt b/app/src/main/java/com/xiaoqu/watch/event/AppEvent.kt index ab4569e..7dba15f 100644 --- a/app/src/main/java/com/xiaoqu/watch/event/AppEvent.kt +++ b/app/src/main/java/com/xiaoqu/watch/event/AppEvent.kt @@ -23,6 +23,8 @@ sealed class AppEvent { data class BluetoothStateChanged(val isOn: Boolean) : AppEvent() data class BluetoothDeviceConnected(val deviceName: String) : AppEvent() data class BluetoothDeviceDisconnected(val deviceName: String) : AppEvent() + /** 信号强度变化 (level: 0-4) */ + data class SignalChanged(val level: Int) : AppEvent() // 消息通知 /** 新任务到达(携带任务 ID 列表,横幅+红点用) */ 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 e7f9549..7b08994 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 @@ -7,6 +7,9 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.BatteryManager +import android.telephony.PhoneStateListener +import android.telephony.SignalStrength +import android.telephony.TelephonyManager import com.xiaoqu.watch.event.AppEvent import com.xiaoqu.watch.event.EventBus import dagger.hilt.android.qualifiers.ApplicationContext @@ -37,6 +40,16 @@ class SystemStateMonitor @Inject constructor( /** 是否已注册 */ private var registered = false + /** 信号强度监听器 */ + 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)) + } + } + /** 广播接收器 */ private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { @@ -64,6 +77,11 @@ class SystemStateMonitor @Inject constructor( addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED) } context.registerReceiver(receiver, filter) + + // 注册信号强度监听 + val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager + telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) + registered = true Timber.d("系统状态监听: 已注册") } @@ -77,6 +95,10 @@ class SystemStateMonitor @Inject constructor( } catch (e: Exception) { Timber.w(e, "系统状态监听: 取消注册异常") } + // 取消信号监听 + val telephony = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager + telephony?.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE) + registered = false Timber.d("系统状态监听: 已取消注册") } 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 f0bcf9f..3a02ca5 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 @@ -533,6 +533,10 @@ class HomeFragment : BaseFragment() { is AppEvent.BluetoothStateChanged -> { statusBar.updateBluetooth(event.isOn) } + // 信号强度变化 + is AppEvent.SignalChanged -> { + statusBar.updateSignal(event.level) + } // 蓝牙设备连接/断开 → 更新设置页 is AppEvent.BluetoothDeviceConnected -> { updateConfigBluetooth(true)