因此,我正在开发天气预报应用程序,在该应用程序中,我正在使用熔融的LocationProviderClient.lastLocation访问设备位置,我们大多数人都知道位置提供者返回了任务,因此我正在使用协程Deferred,以便每当任务获得完成它给我设备的位置 请看一下代码以更好地理解
private fun getLastDeviceLocation(): Deferred<Location?> {
return if (hasLocationPermission())
fusedLocationProviderClient.lastLocation.asDeferred()
else
throw LocationPermissionNotGrantedException()
}
但是现在我希望我的位置成为实时位置,因此我必须使用协程流,以便每当我的位置更改时,我都能够自动获取新位置的天气,但是因为我是新来的Kotlin协程,我不确定如何实现该目标以及如何使用延期流程
有人可以帮我吗,或者如果这不可行,建议我进行一些其他工作以实现我的目标 预先感谢
答案 0 :(得分:0)
如果要将Deferred
转换为Flow
:
val lastLocationFlow: Flow<Location> = flow {
emit(fusedLocationProviderClient.lastLocation.asDeferred().await())
}
flow
是最基本的流程构建器。它采用一个可挂起的块作为参数,负责发出值。 Deferred.await()
将暂停执行,直到任务返回Location
(或null
)为止。然后流程将发出该值并完成操作。
如果要将requestLocationUpdates
从回调转换为Flow
,则可以使用callbackFlow
。