Поток местоположения - PullRequest
1 голос
/ 30 января 2020

Я хочу использовать поток сопрограмм в качестве источника текущей позиции телефона и отметить его на карте. Вот что у меня есть в моем 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-> }

Кто-нибудь знает, что я делаешь неправильно?

1 Ответ

0 голосов
/ 31 января 2020

Полагаю, проблема в том, что функция combineLatest ничего не излучает, пока оба источника потока не излучают хотя бы одно значение. Хороший способ решить эту проблему - инициализировать оба потока значением, но я не знаю, сможете ли вы сделать это в своем коде.

...