无法在Android上的浏览器上使用Javascript获取GPS坐标

axs*_*axs 6 javascript html5 gps android geolocation

我是android,java和javascript编码的新手.

我正在尝试获取当前的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" />
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

使用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>
Run Code Online (Sandbox Code Playgroud)

非常感谢,斧头

axs*_*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);
         }
        });
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请按以下两个链接 -