/* Apparently geocoder is not working with the Emulated android. This is a workaround. Here is how I implemented it: try { possibleAddresses = g.getFromLocation(location.getLatitude(), location.getLongitude(), 3); } catch (IOException e) { if("sdk".equals( Build.PRODUCT )) { Log.d(TAG, "Geocoder doesn't work under emulation."); possibleAddresses = ReverseGeocode.getFromLocation(location.getLatitude(), location.getLongitude(), 3); } else e.printStackTrace(); } */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.location.Address; import android.util.Log; public class ReverseGeocode { public static List<Address> getFromLocation(double lat, double lon, int maxResults) { String urlStr = "http://maps.google.com/maps/geo?q=" + lat + "," + lon + "&output=json&sensor=false"; String response = ""; List<Address> results = new ArrayList<Address>(); HttpClient client = new DefaultHttpClient(); Log.d("ReverseGeocode", urlStr); try { HttpResponse hr = client.execute(new HttpGet(urlStr)); HttpEntity entity = hr.getEntity(); BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent())); String buff = null; while ((buff = br.readLine()) != null) response += buff; } catch (IOException e) { e.printStackTrace(); } JSONArray responseArray = null; try { JSONObject jsonObject = new JSONObject(response); responseArray = jsonObject.getJSONArray("Placemark"); } catch (JSONException e) { return results; } Log.d("ReverseGeocode", "" + responseArray.length() + " result(s)"); for(int i = 0; i < responseArray.length() && i < maxResults-1; i++) { Address addy = new Address(Locale.getDefault()); try { JSONObject jsl = responseArray.getJSONObject(i); String addressLine = jsl.getString("address"); if(addressLine.contains(",")) addressLine = addressLine.split(",")[0]; addy.setAddressLine(0, addressLine); jsl = jsl.getJSONObject("AddressDetails").getJSONObject("Country"); addy.setCountryName(jsl.getString("CountryName")); addy.setCountryCode(jsl.getString("CountryNameCode")); jsl = jsl.getJSONObject("AdministrativeArea"); addy.setAdminArea(jsl.getString("AdministrativeAreaName")); jsl = jsl.getJSONObject("SubAdministrativeArea"); addy.setSubAdminArea(jsl.getString("SubAdministrativeAreaName")); jsl = jsl.getJSONObject("Locality"); addy.setLocality(jsl.getString("LocalityName")); addy.setPostalCode(jsl.getJSONObject("PostalCode").getString("PostalCodeNumber")); addy.setThoroughfare(jsl.getJSONObject("Thoroughfare").getString("ThoroughfareName")); } catch (JSONException e) { e.printStackTrace(); continue; } results.add(addy); } return results; } }