2012-07-01 25 views
6

Sono molto nuovo per la codifica di android, java e javascript.Impossibile ottenere le coordinate GPS utilizzando Javascript sul browser in Android

Sto cercando di ottenere le coordinate GPS correnti e di seguirlo su un dispositivo Android. Sto usando webview e la maggior parte del codice è scritta in javascript.

Ho cercato molto per alcuni giorni e ho provato molti modi diversi ma non riesco a ottenere le coordinate GPS sul dispositivo Android. Si prega di dare un'occhiata al codice e hel pme capire perché non sto ottenendo la posizione GPS.

Alcune cose da segnalare sono: 1. Ho scaricato e controllato altre app di sensori e posso vedere le coordinate GPS correnti visualizzate (quindi il GPS sta funzionando sul dispositivo). 2. Quando eseguo il mio codice, vedo l'icona di ricerca GPS nell'area di notifica, continua a lampeggiare ma non si aggiusta mai. 3. Quando eseguo solo il file HTML con il javascript su un browser portatile, si chiede il permesso di condividere la posizione e quindi fornisce le coordinate, tuttavia lo stesso file non mostra nulla in Android.

Si prega di dare un'occhiata al codice qui sotto e aiutarmi a capire questo fuori. Ho provato molto e sto postando questa come la mia ultima speranza.

Il file manifesto disponga delle seguenti autorizzazioni -

<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" /> 

il codice Java principale di Android ha -

@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); 
} 

e il file HTML con il Javascript è -

<!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> 

Grazie mille in anticipo, assi

risposta

7

Bene, ho fatto ulteriori ricerche e ho trovato una soluzione. Sto postando questi link qui come risposta alla mia domanda per chiunque venga fin qui alla ricerca di risposte.

Ho dovuto aggiungere queste righe nel mio codice java prima di caricare l'url e quindi sono stato in grado di vedere le coordinate geografiche.

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); 
     } 
     }); 

Per maggiori informazioni segui questi due link -

-1

Su un 6.0 telefono Android (non è sicuro su altre versioni), questo stava uccidendo per nel mio file build.gradle:

targetSdkVersion: 23 

riducendo che a

targetSdkVersion 21 

fisso il mio problema.

Problemi correlati