navigator.geolocation.getCurrentPosition 总是在 Android 中超时,直到 GPS/位置关闭

新手上路,请多包涵
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});
});

我正在为 Android 应用程序使用 Angular JS 和 Cordova。此代码在桌面上运行良好,但在带有 Lollipop 的 Nexus 4 上运行不正常。根据 Cordova 的要求,控制器代码也在设备就绪后执行

我试过了

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

但我无法获得纬度、经度和地理定位总是超时。

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

原文由 A dev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

navigator.geolocation.getCurrentPosition 仅在选项“enableHighAccuracy”设置为“true”(默认)时适用于 GPS。这就是您无法通过移动设备获取当前位置的原因。关于“it is working on desktop”,我相信你一定在你的浏览器中打开了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”。

原文由 Jack He 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题