Android上的JavaScript地理定位不起作用

我正在开发一个依靠提取移动用户的地理位置数据的网站。 我正在通过以下方式进行典型的方式:

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); } 

即使我切换地理位置方法的顺序,这总是失败,并且[对象PositionError]进入errorOnLocate函数。

这是一个HTC的英雄与android 2.1使用任何浏览器内置。我的GPS是开着的,我已经指示浏览器,让网站查看我的位置。 谷歌地图原生应用程序的“位置”function,在手机上拿起我的位置就好了

更进一步,如果我在个人电脑上使用FireFox 3.5访问我的网站,它会正确地find我的位置(我相信它使用ip和ap数据点的组合)。 无论哪种方式,它使用相同的JavaScript

编辑:这是在浏览器中的html / js,而不是本机应用程序。 另外确切的错误信息是'最后的位置提供者被禁用'

Solutions Collecting From Web of "Android上的JavaScript地理定位不起作用"

这是从一个WebView或从Android浏览器应用程序访问? 如果来自WebView ,则可能需要通过Java调用启用地理定位。 请参阅WebView参考 。

否则,我不能确定你的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> 

这是不是在我的Android 2.4的工作,这个问题是通过启用无线networking位置除了GPS(不只是与GPS工作)

设置 – >位置和隐私 – >启用无线networking。

我使用以下两款手机testing了html5地理定位function:

  • HTC野火
  • HTC Galaxy

两者都运行Android 2.1 update1操作系统,都没有使用内置的Google浏览器和演示网站进行地理定位,如:

不过,我已经开发了我自己的应用程序(使用上面已经介绍的代码的组合)成功运行:

  • HTC野火
  • Android 2.1 update1模拟器
  • 还没有HTC Galaxy尚未testing

和我使用的代码是:

  1. Javascript库:

    函数is_browser_gps_capable(){
         var _locator_object;
        尝试{
             _locator_object = navigator.geolocation;
         catch(e){return false;  }
        如果(_locator_object)
            返回true;
        其他
            返回false;
     } 

    函数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(); } 

    }

  2. 实际的代码在我的html文件中:

     if(is_browser_gps_capable()){
         $('geo_location')。innerHTML ='定位设备...';
         watchLocation(函数(coords){
               var latlng = new google.maps.LatLng(coords.latitude,coords.longitude);
               var myOptions = {
                缩放:16,
                中心:latlng,
                 mapTypeId:google.maps.MapTypeId.ROADMAP
               };
               var map = new google.maps.Map(document.getElementById(“map_canvas”),myOptions);
               var marker = new google.maps.Marker({
                  位置:latlng, 
                  地图:地图,
               }); 
    $('geo_location')。innerHTML = coords.latitude +','+ coords.longitude; },function(){ $('geo_location')。innerHTML ='不支持'; }); } else { $('geo_location')。innerHTML ='不支持'; }

对不起,这个源代码只是不想格式正确,消息我,我会直接发送给你的代码,如果你愿意的话。

我遇到了这个问题,我想这是因为设备上的电源很低。 充电并且问题消失了。