将HTML5地理定位API与Android 2.0+;浏览器
我正在尝试在Android设备上使用地理定位和HTML5API。我用Galaxy S LC(相当于Galaxy S1)进行了测试。Android版本是2.2.1 我已经读了很多关于它的话题,但我仍然没有找到解决办法 我使用以下典型代码进行地理定位: `将HTML5地理定位API与Android 2.0+;浏览器,android,html,geolocation,Android,Html,Geolocation,我正在尝试在Android设备上使用地理定位和HTML5API。我用Galaxy S LC(相当于Galaxy S1)进行了测试。Android版本是2.2.1 我已经读了很多关于它的话题,但我仍然没有找到解决办法 我使用以下典型代码进行地理定位: ` 写下(“试图找到你”); if(导航器.地理位置){ document.write(“支持地理定位”); navigator.geolocation.getCurrentPosition(successCallback、errorCallbac
写下(“试图找到你”);
if(导航器.地理位置){
document.write(“支持地理定位”);
navigator.geolocation.getCurrentPosition(successCallback、errorCallback、,
{
EnableHighAccurance:正确,
超时:10000,//10s
最大值:0
}
);
函数成功回调(位置){
写下(“你已经被定位了。纬度:+position.coords.Latitude+”,经度:+position.coords.longitude”);
};
函数errorCallback(错误){
写(“它不起作用”);
开关(错误代码){
案例错误。权限被拒绝:
文件。写入(“拒绝许可”);
打破
案例错误。位置不可用:
文件。填写(“职位不可用”);
打破
大小写错误。超时:
文件。写入(“超时”);
打破
案例错误。未知错误:
文件。写入(“未知错误”);
打破
}
}
}
否则{
文件(写“LG GooListaln'ES-PAS支持E PAL LE导航员”);
}
它在带有Chrome和Opera的PC上运行良好(但不适用于Firefox)。它还可以在移动设备上与Opera配合使用。但它不适用于Android浏览器。它的版本是2.2.1。
这就是这一次发生的事情:
1.出现以下消息:
“试图找到你”
“支持地理定位”
2.在超时指定的时间(此处为10秒)后,将显示空白页。
不会调用SuccessCallback或errorCallback函数
当我没有指定超时(timeout=infinity)时,如果启用了GPS,它就会工作。如果不是,我也会得到一个没有错误消息的空白页
我在Android浏览器上尝试了HTML5地理定位测试:但也不起作用
我试过了(第一个答案)。它有时会起作用,但我们必须等待2分钟才能得到位置(如评论中所述)
我也试着用一个Webview来获得它,但它的效果完全一样
据说要解决Android浏览器上的这个错误,我们只需要将EnableHighAccurance指定为true,但是如果GPS没有激活,仍然没有调用任何函数(SucesCallback或errorCallback)
如果有人有一个解决方案,这将是一个很大的帮助我
谢谢你的帮助
实际上,空白页是由“文档写入”函数引起的。我用innerHTML替换了它,现在它可以工作了。这意味着将显示错误,并调用errorCallback 现在的问题是Android浏览器只能使用GPS(高精度)确定位置。如果GPS未启用或无法拾取位置(例如在建筑物内),则不会返回位置。 相反,Opera浏览器将使用中继网络(单元ID方法)确定位置(在这种情况下,精度小于150m)
你知道如何强制Android浏览器使用手机ID源吗?这样试试。应该这样做
<!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>
单击按钮获取您的坐标:
试试看
var x=document.getElementById(“演示”);
函数getLocation()
{
if(导航器.地理位置)
{
navigator.geolocation.getCurrentPosition(显示位置、淋浴位置、,
{
EnableHighAccurance:正确,
超时:10000,//10s
//最大值:0
}
);
}
else{x.innerHTML=“此浏览器不支持地理位置。”;}
}
功能显示位置(位置)
{
x、 innerHTML=“纬度:”+position.coords.Latitude+
“
经度:”+position.coords.Longitude;
}
功能错误(错误)
{
开关(错误代码)
{
案例错误。权限被拒绝:
x、 innerHTML=“用户拒绝了地理位置请求。”
打破
案例错误。位置不可用:
x、 innerHTML=“位置信息不可用。”
打破
大小写错误。超时:
x、 innerHTML=“获取用户位置的请求超时。”
打破
案例错误。未知错误:
x、 innerHTML=“发生未知错误。”
打破
}
}
今年1月,谷歌改变了Chrome中定位服务的行为。其中一个变化是,如果http连接未加密,Chrome不会返回当前位置坐标。几个月前我们也遇到过类似的问题,除了Chrome浏览器,我们的web应用程序中的定位服务在所有设备(PC、手机、平板电脑等)上的所有客户端上都能正常工作。在该应用程序上安装SSL证书修复了所有地理位置问题。希望这有帮助。查看此帖子及其解决方案。
<!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>