diff --git a/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt b/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt index 69d7919..1058729 100644 --- a/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt +++ b/app/src/main/java/com/xiaoqu/watch/app/MainActivity.kt @@ -9,6 +9,7 @@ import android.os.PowerManager import android.provider.Settings import android.view.MotionEvent import android.view.View +import androidx.navigation.findNavController import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import com.xiaoqu.watch.databinding.ActivityMainBinding @@ -112,17 +113,32 @@ class MainActivity : AppCompatActivity() { // ===== MQTT 新任务处理 ===== - /** 监听 MQTT type=1 → 通知管理器处理 → 横幅 + NewTaskArrived 事件 */ + /** 监听 MQTT 消息(Activity 级别,不受 Fragment 生命周期影响) */ private fun observeMqttMessages() { activityScope.launch { eventBus.events.collect { event -> when (event) { is AppEvent.MqttMessageReceived -> { - if (event.type == 1) { - notificationManager.onNewTaskMessage(event.rawJson) - val count = notificationManager.pendingCount - if (count > 0) { - notificationBanner.show(count) + when (event.type) { + 1 -> { + // 新任务通知 + notificationManager.onNewTaskMessage(event.rawJson) + val count = notificationManager.pendingCount + if (count > 0) { + notificationBanner.show(count) + } + } + 3 -> { + // 解绑 → 清除数据 → 跳绑定页(从任何页面都能跳) + Timber.d("MainActivity: 收到解绑消息") + bluetoothScanManager.stop() + userPrefs.clear() + try { + findNavController(R.id.nav_host_fragment) + .navigate(R.id.action_global_to_bind) + } catch (e: Exception) { + Timber.w(e, "MainActivity: 解绑导航异常") + } } } } 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 63e5f3a..8c907ca 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 @@ -626,25 +626,7 @@ class HomeFragment : BaseFragment() { Timber.d("首页: 收到日常动态") fetchStatistics() } - 3 -> { - // 解绑 → 停止蓝牙 → 清除数据 → 跳绑定页 - Timber.d("首页: 收到解绑消息") - bluetoothScanManager.stop() - userPrefs.clear() - try { - // 确保当前在 homeFragment 才能导航 - val navController = findNavController() - if (navController.currentDestination?.id == R.id.homeFragment) { - navController.navigate(R.id.action_home_to_bind) - } else { - // 在子页面(任务列表/详情),先弹回首页再跳绑定 - navController.popBackStack(R.id.homeFragment, false) - navController.navigate(R.id.action_home_to_bind) - } - } catch (e: Exception) { - Timber.w(e, "首页: 解绑导航异常") - } - } + // type=3 解绑已移到 MainActivity 处理(Activity 级别,不受 Fragment 生命周期影响) 4 -> { // 系统参数变更(蓝牙/NFC 配置) Timber.d("首页: 收到系统参数变更") diff --git a/app/src/main/res/navigation/nav_main.xml b/app/src/main/res/navigation/nav_main.xml index 98485c7..ce15a38 100644 --- a/app/src/main/res/navigation/nav_main.xml +++ b/app/src/main/res/navigation/nav_main.xml @@ -4,6 +4,11 @@ android:id="@+id/nav_main" app:startDestination="@id/splashFragment"> + + +