kotlin - 位置流向

标签 kotlin google-maps kotlin-coroutines android-livedata kotlin-flow

我想使用协程流作为当前手机位置的来源并将其标记在 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 选项打开,事件就会接收数据。关闭后,流将关闭,并且事件不会对禁用或启用 GPS 选项使用react。

当我使用gpsAwareLocationFlow.asLiveData()时,事件仅在第一次更改 GPS 选项后才能正确 react 。在更改选项之前,它不会执行任何操作。

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

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

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

最佳答案

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

关于kotlin - 位置流向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59991185/

相关文章:

javascript - 本地图滚动到 View 中时动画谷歌地图标记

kotlin - 异步构造生产者

java - 从工件的 .jar 运行时找不到 Kotlinx 协程类

android - Jetpack compose 中的 Google pay Api - 如何

javascript - 将 JSON 文件中的数据加载到 Google map 中的 map 标记中

javascript - 在 map 上显示位置

kotlin - 如何从函数调用挂起函数

gradle - 将iOS/Android Groovy Gradle文件转换为Kotlin-getBinary,getProperty(+文字属性)?

android - 在 Kotlin 中,将 Long 转换为 uint32 ByteArray 并将 Int 转换为 uint8 的最简洁方法是什么?

android - 使用 RxJava2 和 Retrofit2 Mosby MVI 的 OnErrorNotImplementedException