André Thiele
06/05/2021, 7:35 PMprivate fun FusedLocationProviderClient.locationFlow(
request: LocationRequest
) = callbackFlow<Location> {
val callback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult?) {
Log.e("Got result", "$result")
result ?: return
try {
offer(result.lastLocation)
} catch (e: Exception) {
// swallow
}
}
}
requestLocationUpdates(
request,
callback,
Looper.getMainLooper()
).addOnFailureListener { e ->
close(e) // in case of exception, close the Flow
}
// clean up when Flow collection ends
awaitClose {
removeLocationUpdates(callback)
}
}