package nz.co.android.cowseye.service; import java.io.IOException; import java.util.List; import nz.co.android.cowseye.gps.GPSManager; import android.content.Context; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.os.AsyncTask; import android.util.Log; import com.google.android.maps.GeoPoint; public class ReverseGeoCodeCoordinatesService extends AsyncTask<Void, Void, String> { private Context context; private GPSManager gpsManager; private Geocoder geocoder; private Location location; private String currentAddress; private GeoPoint oldGeoPoint; public ReverseGeoCodeCoordinatesService(Context context, GPSManager gpsManager, Geocoder geocoder, Location location, String currentAddress, GeoPoint oldGeoPoint){ this.context = context; this.gpsManager = gpsManager; this.geocoder = geocoder; this.location = location; this.currentAddress = currentAddress; this.oldGeoPoint = oldGeoPoint; } protected String doInBackground(Void... Void) { try { List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); String num = addresses.get(0).getFeatureName().trim(); String street = addresses.get(0).getThoroughfare().trim(); String subArea = addresses.get(0).getSubAdminArea().trim(); String addr =""; if(!num.equals("")) addr+=num+=" "; if(!street.equals("")) addr+=street+", "; if(!subArea.equals("")) addr+=subArea; return addr; } catch (IOException e) { Log.e(toString(), "Reverse Geocoding error: "+e); } return null; } /** Does not do anything as nothing needs to be done upon ending*/ protected void onPostExecute(String addr) { if(addr==null){ Log.e(toString(), "Error in reverse geo coding"); gpsManager.requestBuildAlertMessageUpdatePosition(null,oldGeoPoint); } else if(!addr.equals("")){ if(!(addr.trim()).equals(currentAddress)){ gpsManager.requestBuildAlertMessageUpdatePosition(addr,oldGeoPoint); } } } }