public Single<Address> getFromLocation(@NonNull final Geopoint coords) {
        if (!Geocoder.isPresent()) {
            return Single.error(new RuntimeException("no Android reverse geocoder"));
        }
        return Observable.defer(() -> {
            try {
                return addressesToObservable(geocoder.getFromLocation(coords.getLatitude(), coords.getLongitude(), 1));
            } catch (final Exception e) {
                Log.i("Unable to use Android reverse geocoder: " + e.getMessage());
                return Observable.error(e);
            }
        }).subscribeOn(AndroidRxUtils.networkScheduler).firstOrError();
    }
Retrieve the physical address for coordinates. The work happens on the network scheduler.

@param coords the coordinates
@return a single containing one location or an error
main/src/main/java/cgeo/geocaching/address/AndroidGeocoder.java