Kan inte hämta GPS-koordinater med Javascript i webbläsare på Android


Jag är väldigt ny på Android-, Java- och JavaScript-programmering.

Jag försöker få aktuella GPS-koordinater och spåra dem därefter på en Android-enhet. Jag använder webview och största delen av koden är skriven i JavaScript.

Jag har sökt mycket i några dagar och provat många olika sätt men jag kan inte få GPS-koordinater på Android-enheten. Vänligen titta på koden och hjälp mig att ta reda på varför jag inte får GPS-positionen.

Några saker att påpeka är - 1. Jag laddade ner och kontrollerade andra sensorappar och kan se de aktuella GPS-koordinaterna som visas (så GPS fungerar på enheten). 2. När jag kör min kod ser jag GPS-sökikonen i meddelandeområdet, den fortsätter blinka men fastnar aldrig. 3. När jag kör endast HTML-filen med JavaScript på en laptop-webbläsare frågar den efter tillstånd att dela plats och ger sedan koordinaterna, men samma fil visar ingenting på Android.

Vänligen titta på koden nedan och hjälp mig att lista ut detta. Jag har försökt mycket och lägger upp detta som min sista hopp.

Manifestfilen har följande behörigheter -

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

Huvud-Java-koden i Android har -

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

Och HTML-filen med javascript är -

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

Tack så mycket i förväg, axs

Svar #1

Jo, jag gjorde ytterligare sökningar och hittade en lösning. Jag postar dessa länkar här som svar på min fråga för alla som kommer hit och letar efter svar.

Jag var tvungen att lägga till dessa rader i min Java-kod innan jag laddade URL:en och sedan kunde jag se geo-koordinaterna.

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

För mer information, följ dessa två länkar -

  • Android WebView-geolokalisering
  • Android: Använda html5 för att bestämma geolocation i webview med javascript api

Svar #2

På en Android 6.0-telefon (inte säker på andra versioner) förstörde detta det för mig i min build.gradle-fil:

targetSdkVersion: 23

att reducera det till

targetSdkVersion 21

fixade mitt problem.