我正在尝试在Android设备上使用HTML5 API的地理定位功能。我已经用Galaxy S LC(相当于Galaxy S1)进行了测试。Android版本为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>
它在PC上使用Chrome和Opera非常好(但不适用于Firefox)。它也可以在移动设备上使用Opera。但是在Android浏览器上无法使用。其版本为2.2.1。 在此情况下发生了以下情况: 1. 出现以下消息: “尝试定位您” “支持地理定位” 2. 在超时时间到达后(这里是10秒),将显示一个空白页面。 函数sucessCallback或errorCallback未被调用。
当我不指定超时时间(timeout = infinity)时,如果启用了GPS,则可以正常工作。如果没有启用,则也会收到一个没有错误消息的空白页面。
我在Android浏览器上尝试了这个HTML5 Geolocation测试:http://html5demos.com/geo,它也无法工作。
我尝试了this code(第一个答案)。有时候它能够工作,但我们必须等待2分钟才能获得位置(如评论中所说)。
我还尝试通过Webview和所需的所有规格获取它,但效果完全相同。 这里说要解决Android浏览器上的此错误,我们只需要将enableHighAccuracy设置为true,但如果GPS未激活,则仍然不会调用任何函数(sucessCallback或errorCallback)。
如果有人有解决方案,那对我来说将是一个很大的帮助。
感谢您的帮助。
实际上,空白页面是由"document.write"函数引起的。我用innerHTML替换了它,现在它可以工作了。这意味着错误会被显示出来,并调用errorCallback。
现在的问题是,安卓浏览器只能使用GPS(高精度)来确定位置。如果GPS未启用或无法获取位置(例如在建筑物内),它将不返回位置。相反,Opera浏览器将使用中继网络(Cell-ID方法)来确定位置(在这种情况下精度小于150m)。
您知道如何强制安卓浏览器使用cell-ID来源吗?