Я хочу использовать поток сопрограмм в качестве источника текущей позиции телефона и отметить его на карте. Вот что у меня есть в моем 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.
Когда я использую gpsAwareLocationFlow.asLiveData()
, активность реагирует правильно только после первого изменения опции GPS. До того, как опция была изменена, она ничего не делает.
Первой идеей было использование combine
в обоих потоках. Оказалось, что до тех пор, пока оба работают хорошо сами по себе (по крайней мере, как поток), после их объединения поток результатов не получает никаких уведомлений.
val resultFlow = locationFlow.combine(gpsAwareLocationFlow){ a, b-> }
Кто-нибудь знает, что я делаешь неправильно?