【问题标题】:Using HTML5 Geolocation API with Android 2.0+ Browser在 Android 2.0+ 浏览器中使用 HTML5 Geolocation API
【发布时间】:2012-05-01 11:44:20
【问题描述】:

我正在尝试在 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,但它也不起作用。

我试过this code(第一个答案)。它有时有效,但我们必须等待 2 分钟才能获得位置(如 cmets 中所述)。

我也尝试通过带有 all the specifications needed 的 Webview 来获取它,但它的作用完全相同。

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

如果有人有解决方案,那对我会有很大帮助。

感谢您的帮助。


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

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

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

【问题讨论】:

标签: android html geolocation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-22
      • 2014-11-05
      • 2012-06-09
      • 1970-01-01
      • 2011-03-05
      • 2019-06-25
      • 2015-04-07
      • 2015-10-25
      相关资源
      最近更新 更多