4

我正在尝试在 Android 设备上将 Geolocation 与 HTML5 API 一起使用。我使用 Galaxy S LC(相当于 Galaxy S1)进行了测试。安卓版本为 2.2.1。

我已经阅读了很多关于它的主题,但我仍然没有找到解决方案。

我使用这个典型的代码进行地理定位:

`

<script type="text/javascript">

document.write("Trying to locate you");

if(navigator.geolocation){
    document.write("Geolocation is supported");

    navigator.geolocation.getCurrentPosition(successCallback, errorCallback,
  {
    enableHighAccuracy : true,
    timeout : 10000, // 10s
    maximumAge : 0
  }
);


function successCallback(position){
    document.write("You have been located. Latitude :" + position.coords.latitude +", longitude : " + position.coords.longitude);       
};


function errorCallback(error){
    document.write("It didn't work");
    switch(error.code){
    case error.PERMISSION_DENIED:
        document.write("Permission denied");
        break;
    case error.POSITION_UNAVAILABLE:
        document.write("Position unavailable");
        break;
    case error.TIMEOUT:
        document.write("Timeout");
        break;
    case error.UNKNOW_ERROR:
        document.write("Unknown error");
        break;              
    }
}

}
else{
    document.write("La géolocalisation n'est pas supportée par le navigateur"); 
}

</script>

它在带有 Chrome 和 Opera 的 PC 上运行良好(但不适用于 Firefox)。它也适用于移动设备上的 Opera。但它不适用于 Android 浏览器。它的版本是 2.2.1。这就是发生的事情: 1. 出现以下消息:“正在尝试定位您” “支持地理定位” 2. 在超时(此处为 10 秒)指定的时间后,将显示一个空白页面。不调用函数 sucessCallback 或 errorCallback。

当我没有指定超时(超时=无穷大)时,如果启用了 GPS,它就可以工作。如果不是,我也会得到一个没有错误消息的空白页。

我在 Android 浏览器上尝试了这个 HTML5 地理定位测试:http: //html5demos.com/geo,它也不起作用。

我试过这个代码(第一个答案)。它有时有效,但我们必须等待 2 分钟才能获得该职位(如评论中所述)。

我还尝试通过具有所有所需规范的 Webview 来获取它,但它的功能完全相同。

这里据说要解决Android浏览器上的这个错误,我们只需将enableHighAccuracy指定为true,但如果没有激活GPS,仍然没有调用任何函数(sucessCallback或errorCallback)。

如果有人有解决方案,那对我来说将是一个很大的帮助。

谢谢您的帮助。


实际上空白页是由“document.write”函数引起的。我用 innerHTML 替换了它,它现在可以工作了。这意味着显示错误,调用errorCallback。

现在的问题是Android浏览器只能使用GPS(高精度)来确定位置。如果 GPS 未启用或无法获取位置(例如在建筑物内),则不会返回位置。相反,Opera 浏览器将使用中继网络(Cell-ID 方法)来确定位置(在这种情况下精度小于 150m)。

你知道如何强制 Android 浏览器使用 cell-ID 源吗?

4

2 回答 2

0

像这样试试。那应该这样做。

<!DOCTYPE html>
<html>
<body>
<p id="demo">Click the button to get your coordinates:</p>
<button onclick="getLocation()">Try It</button>
<script>
var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition,showError,
          {
            enableHighAccuracy : true,
            timeout : 10000, // 10s
            //maximumAge : 0
          }
        );
    }
  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;
    }
  }
</script>

</body>
</html>
于 2013-08-06T02:56:11.747 回答
0

Google 今年 1 月改变了 Chrome 中定位服务的行为。其中一项更改是,如果 http 连接未加密,Chrome 不会返回当前位置坐标。几个月前我们遇到了类似的问题,我们的网络应用程序中的定位服务可以在除 Chrome 浏览器之外的所有设备(PC、手机、平板电脑等)上的所有客户端上正常工作。在该应用上安装 SSL 证书修复了所有地理位置问题。希望这可以帮助。

于 2016-09-18T16:40:37.790 回答