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

Nat*_*Geo 15 html5 android geolocation cordova

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});
});
Run Code Online (Sandbox Code Playgroud)

我正在使用Angular JS和Cordova作为Android应用程序.此代码在桌面上运行正常,但在Nexus 4和Lollipop上运行不正常.根据Cordova的要求,控制器代码也在设备准备完成后执行

我试过了

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

但我无法得到lat,长期和地理定位总是会超时.

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

Jac*_* He 8

当选项"enableHighAccuracy"设置为"true"(默认值)时,navigator.geolocation.getCurrentPosition仅适用于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);
Run Code Online (Sandbox Code Playgroud)

另一方面,您可以将enableHighAccuracy设置为"false".

  • 地理定位不需要 GPS 即可发挥作用。它可以在桌面浏览器中运行,无需打开任何 GPS 设置。 (2认同)
  • 如果我没有收到正确答案,可以获得多少赏金.我想知道在任何官方文档中,移动设备的"getCurrentPosition仅适用于GPS".如果这只是观察,那么在发布我的问题之前我已经观察到了这一点,这就是我的问题所在,这就是为什么移动设备如果GPS关闭与桌面浏览器相比没有获得位置. (2认同)

rod*_*ing 6

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

  {enableHighAccuracy:false,maximumAge:Infinity, timeout:60000}
Run Code Online (Sandbox Code Playgroud)