2012-07-01 62 views
6

我對android,java和javascript編碼非常新穎。無法在Android中的瀏覽器上使用Javascript獲取GPS座標

我想獲得當前的GPS座標,並在Android設備上跟蹤它。我使用的是webview,大部分代碼都是用javascript編寫的。

我已經搜索了很多天,並嘗試了很多不同的方式,但我無法獲得Android設備上的GPS座標。請看看代碼,然後找出爲什麼我沒有獲得GPS位置。

有幾件事要注意 - 1.我下載並檢查了其他傳感器應用程序,並可以看到當前顯示的GPS座標(因此GPS正在設備上運行)。 2.當我運行我的代碼時,我看到通知區域中的GPS搜索圖標,它一直閃爍,但從未修復。 3.當我在膝上型計算機瀏覽器上只運行帶有javascript的HTML文件時,它會請求共享位置的權限,然後它會給出座標,但同一文件在android中不顯示任何內容。

請看看下面的代碼,並幫我弄清楚這一點。我已經嘗試了很多,並將其作爲我最後的希望發佈。

清單文件具有以下權限 -

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

Android中主要的Java代碼有 -

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

而且使用JavaScript的HTML文件 -

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

提前致謝, axs

回答

7

那麼我做了進一步的搜索並找到了解決方案。我在這裏發佈這些鏈接是爲了回答我的問題,任何人到此爲止尋找答案。

我必須在加載url之前在我的java代碼中添加這些行,然後才能看到地理座標。

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

欲瞭解更多信息,請按照下列兩個環節 -

-1

在Android 6.0手機(不知道其他版本),這是它殺死了我在我的build.gradle文件中:

targetSdkVersion: 23 

減少到

targetSdkVersion 21 

固定我的問題。