【问题标题】:navigator.geolocation.getCurrentPosition always getting timeout in Android until GPS/Location is OFFnavigator.geolocation.getCurrentPosition 总是在 Android 中超时,直到 GPS/Location 关闭
【发布时间】:2015-01-25 04:30:58
【问题描述】:
app.controller('dashboard', function($scope){
    $scope.getPosition = function(position){
        $scope.acc = position.coords;
        $scope.lat = position.coords.latitude;
        $scope.lng = position.coords.longitude;
        $scope.$apply();
    };
    $scope.getPositionErr = function(error){
        alert('code: '    + error.code    + '\n' +
                  'message: ' + error.message + '\n');
    };
    navigator.geolocation.getCurrentPosition($scope.getPosition, $scope.getPositionErr, {maximumAge: 0, timeout: 6000, enableHighAccuracy:false});
});

我正在将 Angular JS 和 Cordova 用于 Android 应用程序。 此代码在桌面上运行良好,但在带有 Lollipop 的 Nexus 4 上运行良好。 根据 Cordova 的要求,控制器代码也在 deviceready 之后执行

我试过了

  • 将 HighAccuracy 设置为 false
  • 删除地理定位插件,使其使用 Wifi 的默认位置
  • 设备重启
  • 清除浏览器缓存
  • 飞行模式开/关
  • Wifi 开/关
  • 开启/关闭移动数据

但我无法获得经纬度,而且地理位置总是超时。

它仅在我从设置中启用位置/GPS 时才有效。启用后,代码按预期工作。

【问题讨论】:

  • 六秒可能不足以超时。大多数大型应用程序至少运行 30 秒以实现位置超时。您是否尝试过更长的超时时间?
  • 是的,我试过 1 分钟,也没有时间。
  • 现在这是类似的东西。在 Android 的 Chrome 浏览器中打开 Geo Location Exmaple。来自 w3schools 的简单地理定位示例。除非你打开你的位置/GPS,否则你将无法获得你的纬度。
  • 您是否在使用任何位置欺骗应用程序,例如“假 GPS”?然后删除它并重试。
  • 我只是在尝试使用默认设置的桌面 Chrome。我使用 chrome 作为最终用户。

标签: android html cordova geolocation


【解决方案1】:

navigator.geolocation.getCurrentPosition 仅在选项“enableHighAccuracy”设置为“true”(默认)时适用于 GPS。这就是您无法通过移动设备获取当前位置的原因。关于“它在桌面上工作”,我相信你一定在浏览器中打开了 GPS 设置。

通常我使用下面的代码来获取位置,无论 GPS 是否打开。

var positionOption = { timeout: 500, enableHighAccuracy: true };
var gpsSunccuss = function(currentPosition) {
    //use gps position
};
var gpsFailed = function() {
    //use some 3rd party position solution(get position by your device ip)
    getPositionBy3rdParty();
};
navigator.geolocation.getCurrentPosition(gpsSunccuss, gpsFailed, positionOption);

另一方面,您可以将 enableHighAccuracy 设置为 'false'。

【讨论】:

  • 地理定位工作不需要 GPS。它可以在桌面浏览器中运行,无需打开任何 GPS 设置。
  • @NatGeo 你能在移动设备上试一试吗?
  • 我已经在使用上面的示例代码在移动设备上进行尝试,并且它可以在桌面 chrome 上运行,而不是在 phonegap 应用程序上运行。所有这些我已经提到过。
  • 如果我没有收到正确答案,如何获得赏金。我想知道在任何官方文档中的哪个位置写着“getCurrentPosition 仅适用于 GPS”用于移动设备。如果这只是观察,那么在发布我的问题之前我已经观察到了这一点,这就是我的问题所在,即与桌面浏览器相比,如果 GPS 关闭,为什么移动设备无法获取位置。
  • @NatGeo 我很抱歉。我忘了告诉你一个重要的选项: enableHighAccuracy 。设置为 true 时,仅启用 GPS;当设置为 false 时,IP 也可以让用户获得位置。我已经更新了我的答案。
【解决方案2】:

我有同样的问题,这为我解决了这个问题

  {enableHighAccuracy:false,maximumAge:Infinity, timeout:60000}

【讨论】:

  • 将 maximumAge 更改为 Infinity 为我解决了这个问题。谢谢!
  • 我同意,因为我的用例有 {enableHighAccuracy:false, maximumAge:Infinity} 选项解决了这个问题。
【解决方案3】:

你可以试试这个。

{enableHighAccuracy:true, Infinity:Infinity, timeout:2000}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2017-01-29
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多