El servicio de Google Geocoder no es viable (Coordenadas a la dirección)
Tengo que conseguir una dirección por coordenadas, pero doesnt trabajo y salidas "Couldnt consigue la dirección":
public String GetAddress(String lat, String lon) { Geocoder geocoder = new Geocoder(this, Locale.ENGLISH); String ret = ""; try { List<Address> addresses = geocoder.getFromLocation(Double.parseDouble(lat), Double.parseDouble(lon), 1); if(addresses != null) { Address returnedAddress = addresses.get(0); StringBuilder strReturnedAddress = new StringBuilder(""); for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) { strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n"); } ret = strReturnedAddress.toString(); ret=ret.substring(0, ret.length() - 1); } else{ ret = "Unknown Address"; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); ret = "Couldn't get Address"; } return ret; }
LogCat:
- Android MediaProjectionManager en servicio
- Cualquier forma de detectar pulsaciones de teclas de volumen o cambios de volumen con el servicio de Android?
- El servicio de fondo necesita enviar la ubicación del GPS en el servidor
- Silencio de Google Iniciar sesión en el servicio de fondo Android
- AlarmManager o Servicio
09-27 23:47:49.837: W/System.err(1862): java.io.IOException: Service not Available 09-27 23:47:49.847: W/System.err(1862): at android.location.Geocoder.getFromLocation(Geocoder.java:136) 09-27 23:47:49.847: W/System.err(1862): at com.example.free.Add.GetAddress(Add.java:634) 09-27 23:47:49.857: W/System.err(1862): at com.example.free.Add$LoadAddress.doInBackground(Add.java:608) 09-27 23:47:49.857: W/System.err(1862): at com.example.free.Add$LoadAddress.doInBackground(Add.java:1) 09-27 23:47:49.857: W/System.err(1862): at android.os.AsyncTask$2.call(AsyncTask.java:287) 09-27 23:47:49.857: W/System.err(1862): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 09-27 23:47:49.857: W/System.err(1862): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 09-27 23:47:49.857: W/System.err(1862): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 09-27 23:47:49.857: W/System.err(1862): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 09-27 23:47:49.857: W/System.err(1862): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 09-27 23:47:49.857: W/System.err(1862): at java.lang.Thread.run(Thread.java:856)
- Servicio de Android interactuando con múltiples actividades
- IntentService: ¿Cómo enqueue correctamente?
- Android API21: VoiceInteractionService onReady () no se llama
- AudioSource.VOICE_CALL no funciona en android 4.0 pero funciona en android 2.3
- Android bluetooth SDP no reconoce el servicio anunciado en JAVAME
- ¿Qué es "Stub" y "AIDL" para en java?
- OnTaskRemoved () no se llama en dispositivos HUAWEI y XIOMI
- ¿Cómo obtener el objeto de vista de enfoque actual en Service?
La respuesta común a este problema es que tienes que reiniciar el dispositivo.
Seguramente no puede decirle a sus usuarios que reinicien el dispositivo para que funcione su aplicación, así que mi solución fue usar un fallback HTTP, aquí está el AsyncTask que uso en mi código.
Tendrá que modificarlo para su situación, ya que la dirección de búsqueda de la posición y no al revés.
private class GetAddressPositionTask extends AsyncTask<String, Integer, LatLng> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected LatLng doInBackground(String... plookupString) { String lookupString = plookupString[0]; final String lookupStringUriencoded = Uri.encode(lookupString); LatLng position = null; // best effort zoom try { if (geocoder != null) { List<Address> addresses = geocoder.getFromLocationName( lookupString, 1); if (addresses != null && !addresses.isEmpty()) { Address first_address = addresses.get(0); position = new LatLng(first_address.getLatitude(), first_address.getLongitude()); } } else { Log.e(TAG, "geocoder was null, is the module loaded? " + isLoaded); } } catch (IOException e) { Log.e(TAG, "geocoder failed, moving on to HTTP"); } // try HTTP lookup to the maps API if (position == null) { HttpGet httpGet = new HttpGet( "http://maps.google.com/maps/api/geocode/json?address=" + lookupStringUriencoded + "&sensor=true"); HttpClient client = new DefaultHttpClient(); HttpResponse response; StringBuilder stringBuilder = new StringBuilder(); try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { // Log.d("MAPSAPI", stringBuilder.toString()); jsonObject = new JSONObject(stringBuilder.toString()); if (jsonObject.getString("status").equals("OK")) { jsonObject = jsonObject.getJSONArray("results") .getJSONObject(0); jsonObject = jsonObject.getJSONObject("geometry"); jsonObject = jsonObject.getJSONObject("location"); String lat = jsonObject.getString("lat"); String lng = jsonObject.getString("lng"); // Log.d("MAPSAPI", "latlng " + lat + ", " // + lng); position = new LatLng(Double.valueOf(lat), Double.valueOf(lng)); } } catch (JSONException e) { Log.e(TAG, e.getMessage(), e); } } return position; } @Override protected void onPostExecute(LatLng result) { Log.i("GEOCODE", result.toString()); super.onPostExecute(result); } };
- Java No se puede crear el controlador dentro del subproceso que no ha llamado Looper.prepare ()
- crear CustomInfoWindow en google map v2