我正在尝试在 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 源吗?