fix: 解绑处理移到MainActivity,用全局action从任何页面跳转
HomeFragment在子页面时viewLifecycleOwner被销毁,collect停止, 收不到解绑消息。改为Activity级别处理+全局导航action,彻底解决。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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: 解绑导航异常")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user