10

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

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] 失败。

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

此外,如果我在个人计算机上使用 FireFox 3.5 访问我的网站,它会正确找到我的位置。(我相信它使用了 ip 和 ap 数据点的组合)。无论哪种方式,它都使用相同的 javascript。

编辑:这是浏览器中的 html/js,而不是本机应用程序。确切的错误消息也是“最后一个位置提供程序被禁用”

4

4 回答 4

12

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

否则,我不确定您的 JS 到底出了什么问题,但这里是我知道适用于 Android 浏览器的 HTML+JS:

<!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>
于 2010-07-30T01:21:16.447 回答
1

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

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

于 2013-06-06T06:51:00.833 回答
0

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

  • HTC 野火
  • 宏达银河

两者都运行 Android 2.1 update1 操作系统,并且都未能使用内置的 Google 浏览器和演示站点进行地理定位,例如:

但是,我已经开发了自己的应用程序(使用上面已经提供的代码组合),它成功运行在:

  • HTC 野火
  • Android 2.1 update1 模拟器
  • 尚未有 HTC Galaxy 进行测试

我正在使用的代码是:

  1. Javascript库:

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

    }

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

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

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

于 2010-09-21T12:05:19.143 回答
0

我遇到了这个问题,我认为这是因为设备上的电源很低。给它充电,问题就消失了。

于 2013-09-11T23:19:51.507 回答