Геокодерът е известен като ненадежден на по-стари устройства (както и на Genymotion, така че използвам помощен клас, който работи във всички среди), както и проблематичен като цяло като клас (и точност на резултатите).
Можете да използвате Google Maps, за да направите геолокация много лесно,
Асинхронна задача, която написах, за да използвам първо Geocoder и да се върна към HttpRequest (използвайки volley), ако това не успее, е на https://gist.github.com/selecsosi/6705630
съответната част:
Направете заявка до
"http://maps.google.com/maps/api/geocode/json?address=" + URLEncoder.encode(mAddress, "utf-8") + "&ka&sensor=false"
като mAddress е местоположението, което търсите.
Тази заявка ще ви върне JSON обект, който можете да анализирате така
public static LatLng getLatLngFromGoogleJson(JSONObject jsonObject) {
double lon = 0d;
double lat = 0d;
try {
lon = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lng");
lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lat");
} catch (JSONException e) {
if(Log.isLoggable(TAG, Log.ERROR))Log.e(TAG, "Error parsing google response", e);
}
return new LatLng(lat, lon);
}
person
Selecsosi
schedule
25.09.2013