Uso de la API de geolocalización HTML5 con Android 2.0+ Browser

Estoy intentando utilizar la geolocalización con la API HTML5 en dispositivos Android. Hice mis pruebas con un Galaxy S LC (equivalente a Galaxy S1). La versión de Android es 2.2.1.

He leído muchos temas sobre él pero todavía no encontré una solución.

Yo uso este código típico para Geolocating:

<script type="text/javascript"> document.write("Trying to locate you"); if(navigator.geolocation){ document.write("Geolocation is supported"); navigator.geolocation.getCurrentPosition(successCallback, errorCallback, { enableHighAccuracy : true, timeout : 10000, // 10s maximumAge : 0 } ); function successCallback(position){ document.write("You have been located. Latitude :" + position.coords.latitude +", longitude : " + position.coords.longitude); }; function errorCallback(error){ document.write("It didn't work"); switch(error.code){ case error.PERMISSION_DENIED: document.write("Permission denied"); break; case error.POSITION_UNAVAILABLE: document.write("Position unavailable"); break; case error.TIMEOUT: document.write("Timeout"); break; case error.UNKNOW_ERROR: document.write("Unknown error"); break; } } } else{ document.write("La géolocalisation n'est pas supportée par le navigateur"); } </script> 

Funciona bien en PC con Chrome y Opera (pero no con Firefox). También funciona con Opera en el dispositivo móvil. Pero no funciona con el navegador de Android. Su versión es 2.2.1. Esto es lo que está sucediendo en este: 1. Aparecen los siguientes mensajes: "Tratar de localizarlo" "La geolocalización es compatible" 2. Después del tiempo especificado por el tiempo de espera (10s aquí) se muestra una página en blanco. Las funciones sucessCallback o errorCallback no se llaman.

Cuando no especifique un tiempo de espera (timeout = infinito), funciona si el GPS está habilitado. Si no es así, también obtengo una página en blanco sin mensajes de error.

He intentado esta prueba de geolocalización HTML5 en el navegador de Android: http://html5demos.com/geo y también no funciona.

He intentado este código (primera respuesta). Funciona a veces, pero tenemos que esperar 2 minutos para conseguir la posición (como se dijo en los comentarios).

También traté de conseguirlo a través de una Webview con todas las especificaciones necesarias, pero hace exactamente lo mismo.

Aquí se dice que para resolver este error en el navegador de Android sólo tenemos que especificar el enableHighAccuracy a true, pero si el GPS no está activado todavía no hay ninguna función (sucessCallback o errorCallback) llamado.

Si alguien tiene una solución sería una gran ayuda para mí.

Gracias por tu ayuda.


En realidad, la página en blanco fue causada por la función "document.write". Lo reemplazé por innerHTML y ahora funciona. Esto significa que se muestran errores, se llama al errorCallback.

Ahora el problema es que el navegador de Android sólo puede determinar la posición utilizando el GPS (HighAccuracy). Si el GPS no está habilitado o no puede captar la posición (por ejemplo en un edificio), no devolverá una posición. Por el contrario, el navegador Opera utilizará la red de retransmisión (método Cell-ID) para determinar la posición (en ese caso, la precisión es inferior a 150 m).

¿Sabes cómo obligar al navegador de Android a usar la fuente de ID de celda?

2 Solutions collect form web for “Uso de la API de geolocalización HTML5 con Android 2.0+ Browser”

Pruébelo de esta manera. Deberias hacer eso.

 <!DOCTYPE html> <html> <body> <p id="demo">Click the button to get your coordinates:</p> <button onclick="getLocation()">Try It</button> <script> var x=document.getElementById("demo"); function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition,showError, { enableHighAccuracy : true, timeout : 10000, // 10s //maximumAge : 0 } ); } else{x.innerHTML="Geolocation is not supported by this browser.";} } function showPosition(position) { x.innerHTML="Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude; } function showError(error) { switch(error.code) { case error.PERMISSION_DENIED: x.innerHTML="User denied the request for Geolocation." break; case error.POSITION_UNAVAILABLE: x.innerHTML="Location information is unavailable." break; case error.TIMEOUT: x.innerHTML="The request to get user location timed out." break; case error.UNKNOWN_ERROR: x.innerHTML="An unknown error occurred." break; } } </script> </body> </html> 

Google cambió el comportamiento de los servicios de ubicación en Chrome este mes de enero. Uno de los cambios fue que Chrome no devuelve las coordenadas de ubicación actuales si la conexión http no está cifrada. Tuvimos un problema similar hace unos meses cuando los servicios de ubicación en nuestra aplicación web funcionan bien en todos los clientes en todos los dispositivos (PC, teléfonos, tablets, etc.) excepto en el navegador Chrome. La instalación del certificado SSL en esa aplicación solucionó todos los problemas de localización geográfica. Espero que esto ayude.

  • ¿Es posible cambiar el agente de usuario en Crosswalk Android / Tizen-Apps?
  • ¿Hay una manera de pasar un mensaje de un navegador de Android a una aplicación?
  • ¿Cuál es la utilidad de usar PhoneGap?
  • ¿Cuáles son las características específicas de iPhone / Android?
  • Diferencia entre la aplicación web y la respuesta táctil del teléfono
  • Cómo agregar a 'Añadir a pantalla de inicio' emergente para Android móvil
  • Vídeo incrustado HTML5 de Android
  • Reproducir sonido html5 sonido cuando la pantalla del teléfono está desactivada
  • ¿Hay una aplicación web "añadir a la pantalla de inicio" en Android (como en iOS)
  • ¿Tiene el navegador Android 2.1 de soporte HTML 5 y qué formato de vídeo se reproduce?
  • Diferentes valores de giroscopio en celulares cromados móviles y safari
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.