位置流
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
函数不会发出任何东西,直到两个流源都没有发出至少一个值。我解决这个问题的好方法是用一个值初始化两个流,但我不知道你是否可以在你的代码中这样做。
我想使用协程流作为当前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
函数不会发出任何东西,直到两个流源都没有发出至少一个值。我解决这个问题的好方法是用一个值初始化两个流,但我不知道你是否可以在你的代码中这样做。