如何从Kotlin协程中的函数返回fusionLocationProviderClient()。lastLocation作为流

问题描述 投票:0回答:1

我在做什么

因此,我正在开发天气预报应用程序,其中我使用熔融的LocationProviderClient.lastLocation访问设备位置,我们大多数人都知道位置提供者返回了一个任务,为此,我使用协程程序Deferred,以便每当任务完成时它给了我设备的位置请看一下代码以更好地理解

private fun getLastDeviceLocation(): Deferred<Location?> {
        return if (hasLocationPermission())
            fusedLocationProviderClient.lastLocation.asDeferred()
        else
            throw LocationPermissionNotGrantedException()
    }

我的问题是

但现在我希望我的位置成为实时位置,因此我必须使用协程流,以便每当我的位置更改时,我都能自动获取新位置的天气,但是因为我是Kotlin的新手协程,我不确定如何实现这一目标以及如何使用延期流程,

有人可以帮我吗,或者如果这不可行,建议我进行一些其他工作以实现我的目标在此先感谢

android kotlin-coroutines fusedlocationproviderapi kotlin-coroutines-flow kotlinx.coroutines.flow
1个回答
0
投票

如果要将Deferred转换为Flow

val lastLocationFlow: Flow<Location> = flow {
    emit(fusedLocationProviderClient.lastLocation.asDeferred().await())
}

flow是最基本的流程生成器。它采用一个可挂起的块作为参数,负责发出值。 flow将暂停执行,直到任务返回Deferred.await()(或Deferred.await())为止。然后,该流程将发出该值并完成操作。


如果要将Location从回调转换为null,则可以使用requestLocationUpdates

© www.soinside.com 2019 - 2024. All rights reserved.