我正在开发一个依赖于移动用户的地理位置数据的网站.我这样做是典型的方式通过:
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); }
即使我切换了地理位置方法的顺序,这一定会导致errorOnLocate函数中的[object PositionError]失败.
这是一个HTC Hero与Android 2.1使用任何浏览器内置.我的gps是,我已经指示浏览器允许网站查看我的位置. Google地图本机应用程序上的“位置”功能在手机上接收到我的位置
更进一步,如果我访问我的网站使用FireFox 3.5在我的个人电脑上,它会找到我的位置正确(我相信它使用ip和ap数据点的组合).无论哪种方式,它都使用相同的JavaScript.
编辑:这是浏览器中的html / js,而不是本机应用程序.此外,确切的错误消息是“最后一个位置提供程序被禁用”
解决方法
这是从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>