我正在开发一个依赖于拉动移动用户的地理位置数据的网站。我通过以下方式做到这一点:
function initialize() {
if(window.google && google.gears) {
var geo = google.gears.factory.create('beta.geolocation');
geo.getCurrentPosition(useLocation, errorOnLocate);
}
else if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(useLocation, errorOnLocate);
}
else {
alert("no geo found");
}
}
function errorOnLocate(message)
{
alert(message);
zoomTo(-34.397, 150.644);
}
即使我切换地理定位方法顺序,这始终会在[object PositionError]中输入errorOnLocate函数。
这是一个使用Android 2.1的HTC Hero使用内置的任何浏览器。我的gps已开启,我已指示浏览器允许网站查看我的位置。手机上的谷歌地图本机应用程序中的“位置”功能可以很好地获取我的位置
此外,如果我在我的个人计算机上使用FireFox 3.5访问我的网站,它将正确找到我的位置。(我相信它使用了ip和ap数据点的组合)。无论哪种方式,它都使用相同的JavaScript。
编辑:这是浏览器中的html / js,而不是本机应用。此外,确切的错误消息是“最后一个位置提供程序已被禁用”
答案 0 :(得分:12)
是从WebView
还是从Android浏览器应用访问?如果来自WebView
,您可能需要通过Java调用启用地理定位。请参阅WebView reference。
否则,我不确定你的JS究竟出了什么问题,但我知道HTML + JS适用于Android浏览器:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function watchLocation(successCallback, errorCallback) {
successCallback = successCallback || function(){};
errorCallback = errorCallback || function(){};
// Try HTML5-spec geolocation.
var geolocation = navigator.geolocation;
if (geolocation) {
// We have a real geolocation service.
try {
function handleSuccess(position) {
successCallback(position.coords);
}
geolocation.watchPosition(handleSuccess, errorCallback, {
enableHighAccuracy: true,
maximumAge: 5000 // 5 sec.
});
} catch (err) {
errorCallback();
}
} else {
errorCallback();
}
}
function init() {
watchLocation(function(coords) {
document.getElementById('test').innerHTML = 'coords: ' + coords.latitude + ',' + coords.longitude;
}, function() {
document.getElementById('test').innerHTML = 'error';
});
}
</script>
</head>
<body onload="init()">
<div id="test">Loading...</div>
</body>
</html>
答案 1 :(得分:1)
这不适用于我的Android 2.4,通过启用除GPS之外的无线网络位置解决了这个问题(不使用GPS)
设置 - &gt;位置&amp;隐私 - &gt;启用无线网络。
答案 2 :(得分:0)
我已经使用以下两部手机测试了html5地理定位功能:
两者都在运行Android 2.1 update1操作系统,并且都无法使用内置的Google浏览器和演示网站进行地理定位:
但是,我已经开发了自己的应用程序(使用上面已经提到的代码的组合),它们成功运行:
我正在使用的代码是:
Javascript lib:
function is_browser_gps_capable() {
var _locator_object;
try {
_locator_object = navigator.geolocation;
} catch (e) { return false; }
if (_locator_object)
return true;
else
return false;
}
function watchLocation(successCallback, errorCallback) {
successCallback = successCallback || function(){};
errorCallback = errorCallback || function(){};
// Try HTML5-spec geolocation.
var geolocation = navigator.geolocation;
if (geolocation) {
// We have a real geolocation service.
try {
function handleSuccess(position) {
successCallback(position.coords);
}
geolocation.watchPosition(handleSuccess, errorCallback, {
enableHighAccuracy: true,
maximumAge: 5000 // 5 sec.
});
} catch (err) {
errorCallback();
}
} else {
errorCallback();
}
}
我的html文件中的实际代码:
// Try HTML5-spec geolocation.
var geolocation = navigator.geolocation;
if (geolocation) {
// We have a real geolocation service.
try {
function handleSuccess(position) {
successCallback(position.coords);
}
geolocation.watchPosition(handleSuccess, errorCallback, {
enableHighAccuracy: true,
maximumAge: 5000 // 5 sec.
});
} catch (err) {
errorCallback();
}
} else {
errorCallback();
}
对不起,这个源代码不想正确格式化,给我发消息,如果你愿意,我会直接发给你代码。
答案 3 :(得分:0)
我遇到了这个问题,我认为这是因为设备上的电量很低。充电,问题就消失了。