2012-07-01 17 views
6

Soy muy nuevo en la codificación de Android, Java y Javascript.No se pueden obtener coordenadas de GPS usando Javascript en el navegador en Android

Estoy tratando de obtener las coordenadas GPS actuales y seguirlas en un dispositivo Android. Estoy usando webview y la mayoría del código está escrito en javascript.

He buscado mucho durante unos días y he intentado de muchas maneras diferentes, pero no puedo obtener coordenadas GPS en el dispositivo Android. Eche un vistazo al código y descubra por qué no obtengo la ubicación del GPS.

Algunas cosas para señalar son - 1. Descargué y verifiqué otras aplicaciones de sensores y puedo ver las coordenadas de GPS actuales que se muestran (por lo que el GPS está trabajando en el dispositivo). 2. Cuando ejecuto mi código, veo el icono de búsqueda de GPS en el área de notificación, sigue parpadeando pero nunca se corrige. 3. Cuando ejecuto solo el archivo HTML con el javascript en un navegador portátil, solicita permiso para compartir la ubicación y luego da las coordenadas, sin embargo, el mismo archivo no muestra nada en Android.

Por favor, eche un vistazo al código a continuación y ayúdeme a resolver esto. He intentado mucho y estoy publicando esto como mi última esperanza.

El archivo de manifiesto contiene los siguientes permisos -

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION" /> 

El código java principal de Android tiene -

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    webView = new WebView(this); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.loadUrl("file:///android_asset/mymap.html"); 
    setContentView(webView); 
} 

y el archivo HTML con el JavaScript es -

<!DOCTYPE html> 
<html> 
<body onunload="OnUnload()" onload="getLocation()"> 
<p id="demo">Your coordinates:</p> 
<script> 
var watchID; 
var x=document.getElementById("demo"); 
function getLocation() 
    { 
    if (navigator.geolocation) 
    { 
     var options = {maximumAge:600000, timeout:100000, enableHighAccuracy: true}; 
     watchID = navigator.geolocation.watchPosition(showPosition,showError,options); 
    } 
    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; 
    } 
    } 

function OnUnload() 
{ 
    alert ("The current document will be unloaded!"); 
    navigator.geolocation.clearWatch(watchID); 
} 
</script> 
</body> 
</html> 

Muchas gracias de antemano, axs

Respuesta

7

Bueno, hice una búsqueda más y encontré una solución. Estoy publicando estos enlaces aquí como respuesta a mi pregunta para cualquier persona que venga hasta aquí en busca de respuestas.

Tuve que agregar estas líneas en mi código java antes de cargar la url y luego pude ver las coordenadas geográficas.

webView.getSettings().setGeolocationEnabled(true); 
    webView.setWebChromeClient(new WebChromeClient() { 
     public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { 
      // callback.invoke(String origin, boolean allow, boolean remember);    
      callback.invoke(origin, true, false); 
     } 
     }); 

Para más información Siga estos dos enlaces -

-1

En un 6.0 teléfono Android (no estoy seguro acerca de otras versiones), esto estaba matando por en mi archivo build.gradle:

targetSdkVersion: 23 

reducción que a

targetSdkVersion 21 

fijo mi problema.

Cuestiones relacionadas