位置流

Flow of location

我想使用协程流作为当前phone位置的来源,并在地图上标记。这是我的 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() 时,activity 只有在第一次更改 GPS 选项后才能正确反应。在更改选项之前它不会执行任何操作。

第一个想法是在两个流程上都使用 combine。事实证明,只要两者都独立运行良好(至少作为流),将它们组合后,结果流不会收到任何通知。

    val resultFlow = locationFlow.combine(gpsAwareLocationFlow){ a, b-> }

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

我想问题是 combineLatest 函数不会发出任何东西,直到两个流源都没有发出至少一个值。我解决这个问题的好方法是用一个值初始化两个流,但我不知道你是否可以在你的代码中这样做。