Nije moguće dobiti GPS koordinate korištenjem Javascripta u pregledniku na Androidu


Ja sam vrlo nov u Android, Java i JavaScript programiranju.

Pokušavam dobiti trenutne GPS koordinate i potom ih pratiti na Android uređaju. Koristim webview i većina koda je napisana u javascriptu.

Tražio sam puno nekoliko dana i isprobao mnoge različite načine, ali ne mogu dobiti GPS koordinate na Android uređaju. Molim vas, pogledajte kod i pomozite mi shvatiti zašto ne dobivam GPS lokaciju.

Par stvari koje treba istaknuti su - 1. Preuzeo sam i provjerio druge aplikacije za senzore i mogu vidjeti trenutne GPS koordinate (dakle, GPS na uređaju radi). 2. Kada pokrenem svoj kod, u području obavijesti vidim ikonu traženja GPS-a, ona stalno treperi, ali se nikada ne fiksira. 3. Kada pokrenem samo HTML datoteku s JavaScriptom u pregledniku na laptopu, traži dopuštenje za dijeljenje lokacije i zatim daje koordinate, međutim ista datoteka ništa ne prikazuje na Androidu.

Molim vas da pogledate kod ispod i pomognete mi ovo riješiti. Puno sam pokušavao i objavljujem ovo kao svoju posljednju nadu.

Manifest datoteka ima sljedeće dozvole -

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

Glavni Java kod u Androidu ima -

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

A HTML datoteka s JavaScriptom je -

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

Hvala puno unaprijed, axs

Odgovor #1

Pa, napravio sam daljnje pretraživanje i pronašao rješenje. Objavljujem ove poveznice ovdje kao odgovor na svoje pitanje za svakoga tko ovdje dođe tražeći odgovore.

Morao sam dodati ove retke u svoj Java kod prije učitavanja URL-a i tada sam mogao vidjeti geografske koordinate.

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

Za više informacija pratite ove dvije poveznice -

  • android webview geolokacija
  • Android: Korištenje HTML5 za određivanje geolokacije u WebView-u pomoću JavaScript API-ja

Odgovor #2

Na Android 6.0 telefonu (nisam siguran za druge verzije), ovo mi je stvaralo probleme u mojoj build.gradle datoteci:

targetSdkVersion: 23

smanjujući to na

targetSdkVersion 21

riješio sam svoj problem.