【发布时间】: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 源吗?
【问题讨论】:
-
查看这篇文章及其解决方案。 stackoverflow.com/questions/11280946/…
标签: android html geolocation