我想使用协程流作为当前电话位置的来源并将其标记在 map 上。这是我ViewModel中的内容:


private val gpsAwareLocationFlow = broadcastFlow(BroadcastTransformers.gpsReceiver)
    .flatMapConcat { locationNotifier.locationFlow() }

private val locationFlow = locationNotifier.locationFlow()

val currentPosition = //here is place for solution, I suppose
    .asLiveData()

当我使用locationFlow.asLiveData时,只要GPS选项启用, Activity 就会接收数据。关闭时,流关闭,并且 Activity 对禁用或启用GPS选项无反应。

当我使用gpsAwareLocationFlow.asLiveData()时,只有在第一次更改GPS选项后, Activity 才能正常反应。在更改选项之前,它不会执行任何操作。

第一个想法是在两个流上都使用combine。事实证明,只要两者都可以很好地工作(至少作为流),将它们组合后,结果流就不会收到任何通知。
    val resultFlow = locationFlow.combine(gpsAwareLocationFlow){ a, b-> }

有人知道我在做什么错吗?

最佳答案

我想问题在于,直到两个流源都没有发出至少一个值时,combineLatest函数才发出任何东西。解决此问题的一种好方法是用一个值初始化两个流,但是我不知道您是否可以在代码中执行此操作。

08-05 20:36