2012-07-01 1 views
6

bekommen Ich bin sehr neu in Android, Java und Javascript-Codierung.Kann nicht GPS-Koordinaten mit Javascript auf Browser in Android

Ich versuche, aktuelle GPS-Koordinaten zu erhalten und danach auf einem Android-Gerät zu verfolgen. Ich benutze Webview und der Großteil des Codes ist in Javascript geschrieben.

Ich habe viel für ein paar Tage gesucht und viele verschiedene Möglichkeiten ausprobiert, aber ich bin nicht in der Lage, GPS-Koordinaten auf dem Android-Gerät zu bekommen. Bitte schauen Sie sich den Code an und finden Sie heraus, warum ich den GPS-Standort nicht erhalte.

Ein paar Dinge zu zeigen sind - 1. Ich heruntergeladen und überprüft andere Sensor-Apps und kann die aktuellen GPS-Koordinaten angezeigt werden (so dass das GPS auf dem Gerät funktioniert). 2. Wenn ich meinen Code starte, sehe ich das GPS-Suchsymbol im Infobereich, es blinkt weiter, wird aber nie repariert. 3. Wenn ich nur die HTML-Datei mit dem Javascript auf einem Laptop-Browser ausführen, fragen Sie die Erlaubnis, den Standort zu teilen, und dann gibt es die Koordinaten, aber die gleiche Datei zeigt nichts in Android.

Bitte sehen Sie sich den folgenden Code an und helfen Sie mir, dies herauszufinden. Ich habe viel ausprobiert und schreibe dies als meine letzte Hoffnung.

Die Manifest-Datei hat die folgenden Berechtigungen -

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

Der Haupt Java-Code in Android hat -

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

und die HTML-Datei mit dem JavaScript ist -

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

Vielen Dank im Voraus, axs

Antwort

7

Nun, ich habe weiter gesucht und eine Lösung gefunden. Ich schreibe diese Links hier als Antwort auf meine Frage für jeden, der hier nach Antworten sucht.

Ich musste diese Zeilen in meinem Java-Code vor dem Laden der URL hinzufügen und dann konnte ich die Geokoordinaten sehen.

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

Weitere Informationen folgen diesen beiden Links -

-1

Auf einem Android 6.0 Telefon (nicht sicher über andere Versionen), dies war die Tötung es für Ich in meiner build.gradle Datei:

targetSdkVersion: 23 

dass

targetSdkVersion 21 

feste mein Problem zu reduzieren.