André Thiele
06/05/2021, 7:35 PMAndré 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)
    }
}André Thiele
06/05/2021, 7:59 PM