Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android上的javascript地理定位不';行不通_Javascript_Android_Geolocation_Htc Hero - Fatal编程技术网

android上的javascript地理定位不';行不通

android上的javascript地理定位不';行不通,javascript,android,geolocation,htc-hero,Javascript,Android,Geolocation,Htc Hero,我正在开发一个网站,它依赖于移动用户的地理位置数据。我是通过以下方式进行这项工作的: function initialize() { if(window.google && google.gears) { var geo = google.gears.factory.create('beta.geolocation'); geo.getCurrentPosition(useLocation, errorOnLocate); } e

我正在开发一个网站,它依赖于移动用户的地理位置数据。我是通过以下方式进行这项工作的:

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函数,即使我切换了地理定位方法顺序,也会失败

这是在HTC Hero上的,android 2.1使用内置的任何浏览器。我的gps已打开,我已指示浏览器允许网站查看我的位置。手机上谷歌地图原生应用程序的“位置”功能可以很好地识别我的位置

此外,如果我在个人电脑上使用Firefox3.5访问我的网站,它会正确地找到我的位置。(我相信它结合使用了ip和ap数据点)。无论哪种方式,它都使用相同的javascript


编辑:这是浏览器中的html/js,不是本机应用程序。另外,确切的错误消息是“上次位置提供程序被禁用”

这是从
网络视图访问的还是从Android浏览器应用程序访问的?如果从
WebView
,您可能需要通过Java调用启用地理定位。看看这个

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

函数watchLocation(successCallback,errorCallback){
successCallback=successCallback | | function(){};
errorCallback=errorCallback | |函数(){};
//试试HTML5规范的地理定位。
var geolocation=navigator.geolocation;
if(地理定位){
//我们有真正的地理定位服务。
试一试{
功能手柄成功(位置){
成功回调(position.coords);
}
地理位置。监视位置(handleSuccess、errorCallback、{
EnableHighAccurance:正确,
最大值:5000//5秒。
});
}捕捉(错误){
errorCallback();
}
}否则{
errorCallback();
}
}
函数init(){
值班位置(功能(协调){
document.getElementById('test').innerHTML='coords:'+coords.latitude+','+coords.longitude;
},函数(){
document.getElementById('test')。innerHTML='error';
});
}
加载。。。

我已经用以下两款手机测试了html5地理定位功能:

  • HTC野火
  • HTC银河
两人都在运行Android 2.1 update1操作系统,但都未能使用内置的谷歌浏览器和演示网站进行地理定位,如:

但是,我已经开发了自己的应用程序(使用上述代码的组合),该应用程序成功运行于:

  • HTC野火
  • Android 2.1更新1仿真器
  • 还没有HTC Galaxy进行测试
我使用的代码是:

  • Javascript库:
    
    }

  • 我的html文件中的实际代码:
    
    如果(是否支持浏览器\u gps\u()){
    $('geo_location')。innerHTML='locing device…';
    值班位置(功能(协调){
    var latlng=新的google.maps.latlng(坐标系纬度,坐标系经度);
    变量myOptions={
    缩放:16,
    中心:拉特林,
    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; },函数(){ $('geo_location')。innerHTML='notsupported'; }); }否则{ $('geo_location')。innerHTML='notsupported'; }


  • 很抱歉,此源代码格式不正确,请给我发消息,如果您愿意,我会直接将代码发送给您。

    这在我的Android 2.4上不起作用,通过启用GPS以外的无线网络定位解决了此问题(仅GPS不起作用)


    设置->位置和隐私->启用无线网络

    我遇到了这个问题,我想这是因为设备的电源太低了。充电后,问题就消失了。

    嗯,谢谢你的回复。这是一种不同的方法,但其行为很奇怪。它需要2分钟才能找到一个位置,一旦找到,它只会显示大约5秒钟的坐标,然后最后只显示“错误”。我在上面的代码中添加了选项,它的工作原理是一样的,需要2分钟才能找到一个位置,但至少没有错误。键是EnableHighAccurance标志,没有每次出错的标志。你知道有哪个更专业的论坛可以把这个问题带到哪里去吗?因为在2分钟内,这个项目就完蛋了。奇怪的是,我的NexusOne几乎立刻得到了回复。也许是设备的问题,而不是代码的问题?我会用一个模拟器来尝试,并通过DDMS发送模拟位置数据。 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();
      }
    
    if (is_browser_gps_capable()) { $('geo_location').innerHTML = 'Locating device...'; watchLocation(function(coords) { var latlng = new google.maps.LatLng(coords.latitude, coords.longitude); var myOptions = { zoom: 16, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); var marker = new google.maps.Marker({ position: latlng, map: map, });
    $('geo_location').innerHTML = coords.latitude + ',' + coords.longitude; }, function() { $('geo_location').innerHTML = 'Not supported'; }); } else { $('geo_location').innerHTML = 'Not supported'; }