Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Android浏览器上使用Javascript获取GPS坐标_Javascript_Android_Html_Geolocation_Gps - Fatal编程技术网

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

无法在Android浏览器上使用Javascript获取GPS坐标,javascript,android,html,geolocation,gps,Javascript,Android,Html,Geolocation,Gps,我对android、java和javascript编码非常陌生 我正在尝试获取当前的GPS坐标,然后在Android设备上跟踪它。我使用的是webview,大部分代码都是用javascript编写的 几天来我搜索了很多东西,尝试了很多不同的方法,但我无法在android设备上获得GPS坐标。请看一下代码,帮助我找出为什么我没有得到GPS位置 有几点需要指出: 1.我下载并检查了其他传感器应用程序,可以看到当前显示的GPS坐标(因此GPS正在设备上工作)。 2.当我运行我的代码时,我在通知区域中看

我对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" />
带有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>

您的坐标:

var-watchID; var x=document.getElementById(“演示”); 函数getLocation() { if(导航器.地理位置) { var options={maximumAge:600000,timeout:100000,enableHighAccurance:true}; watchID=navigator.geolocation.watchPosition(showPosition、showError、options); } else{x.innerHTML=“此浏览器不支持地理位置。”;} } 功能显示位置(位置) { x、 innerHTML=“纬度:”+position.coords.Latitude+ “
经度:”+position.coords.Longitude; } 功能错误(错误) { 开关(错误代码) { 案例错误。权限被拒绝: x、 innerHTML=“用户拒绝了地理位置请求。” 打破 案例错误。位置不可用: x、 innerHTML=“位置信息不可用。” 打破 大小写错误。超时: x、 innerHTML=“获取用户位置的请求超时。” 打破 案例错误。未知错误: x、 innerHTML=“发生未知错误。” 打破 } } 函数OnUnload() { 警报(“当前文档将被卸载!”); navigator.geolocation.clearWatch(watchID); }
提前多谢了,
axs

我做了进一步的搜索,找到了一个解决方案。我把这些链接贴在这里,作为我的问题的答案,欢迎来到这里寻找答案的人

在加载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);
         }
        });
有关更多信息,请访问以下两个链接-

在安卓6.0手机上(不确定其他版本),这在我的
build.gradle文件中为我扼杀了它:

targetSdkVersion: 23
减少到

targetSdkVersion 21

修复了我的问题。

当我使用
webView.setWebChromeClient(新WebChromeClient(){…
应用程序在我的手机上打开chrome应用程序时…为什么?
targetSdkVersion 21