André Thiele
private 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) } }
A modern programming language that makes developers happier.