2012-07-01 9 views
6

Jestem bardzo nowy w kodowaniu android, java i javascript.Nie można uzyskać współrzędnych GPS za pomocą JavaScript w przeglądarce w Androidzie

Próbuję uzyskać aktualne współrzędne GPS i zapisuje je potem na urządzeniu z Androidem. Używam webview i większość kodu jest napisana w javascript.

Szukałem dużo na kilka dni i próbowaliśmy wielu różnych sposobów, ale nie jestem w stanie uzyskać współrzędne GPS na urządzeniu z Androidem. Proszę spojrzeć na kod i dowiedzieć się, dlaczego nie otrzymuję lokalizacji GPS.

Kilka rzeczy do zrobienia - 1. Pobrałem i sprawdziłem inne aplikacje czujników i mogę zobaczyć bieżące współrzędne GPS pokazane (aby GPS działał na urządzeniu). 2. Po uruchomieniu kodu widzę ikonę wyszukiwania GPS w obszarze powiadomień, która ciągle miga, ale nigdy nie naprawia. 3. Kiedy uruchomię tylko plik HTML z javascript na przeglądarce laptopa, prosi o pozwolenie na udostępnianie lokalizacji, a następnie podaje współrzędne, jednak ten sam plik nie pokazuje niczego w Androidzie.

Proszę spojrzeć na poniższy kod i pomóc mi to obliczyć. Wiele próbowałem i ogłaszam to jako moją ostatnią nadzieję.

Plik manifestu ma następujące uprawnienia -

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

Głównym kod Java na Android -

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

i plik HTML z JavaScript jest -

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

Wielkie dzięki, topory

Odpowiedz

7

Zrobiłem dalsze wyszukiwanie i znalazłem rozwiązanie. Zamieszczam te linki tutaj jako odpowiedź na moje pytanie dla każdego, kto przychodzi tutaj szukając odpowiedzi.

musiałem dodać te linie w moim kodu java przed załadowaniem URL, a następnie udało mi się zobaczyć współrzędnych geograficznych.

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

Aby uzyskać więcej informacji następują te dwa linki -

-1

Na Android 6.0 telefonu (nie wiem o innych wersjach), to zabija go ja w moim pliku build.gradle:

targetSdkVersion: 23 

zmniejszenie że do

targetSdkVersion 21 

ustalone mój problem.