当定位模式设置为“0”时,总是达到关于地理定位的超时;仅设备”;

Timeout about geolocation always reached when position mode is set to "Device only"

本文关键字:定位 于地理 超时 设置 模式      更新时间:2023-09-26

我拥有一个Ionic应用程序(Cordova)。

我有这个JS代码旨在获得Android设备的位置:

$cordovaGeolocation.getCurrentPosition({
                    enableHighAccuracy: true,
                    timeout: 15000
                }) 

$cordovaGeolocation来源于ng cordova库
我成功地检查了插件org.apache.cordova.geolocation是否已更新为上一个当前版本。

一些用户抱怨第一次查询超过15秒
请注意,超时设置为15000毫秒=>15秒
这意味着该设备没有成功确定位置。

经过调查,我发现了问题:
这些用户已将其位置模式设置为"仅限设备",或在设备设置中也称为"仅GPS"

当用户切换到"高精度模式"时,整个工作不到一秒钟。

如何在不建议用户切换到"高精度模式"的情况下解决此问题?是虫子吗?

注意,我也用enableHighAccuracy: false进行了测试,但结果相同。

我不是唯一一个有这个"大"问题的人:
Phonegap-具有省电和仅GPS模式的地理定位
但没有答案。。

我在github上看到过您的问题。我正在使用ng cordova插件。我使用以下变通方法使GPS只工作。由于低精度越快,超时时间为4s。

$cordovaGeolocation.getCurrentPosition({enableHighAccuracy: false, maximumAge: MAXAGE, timeout: 4000})
            .then(
                function (position) { //success Low-Accuracy
                    console.log('getCurrentPosition: HighAccuracy false: Ok!');
                    //[..]
                },
                function(err) { //error Low-Accuracy
                    console.log(err);
                    $cordovaGeolocation.getCurrentPosition({enableHighAccuracy: true, maximumAge: MAXAGE, timeout: 10000})
                    .then(
                        function (position) { //success High-Accuracy
                            console.log('getCurrentPosition: HighAccuracy true: Ok!');
                            //[..]
                        },
                        function(err) { //error High-Accuracy
                            console.log('getLocation: ERRO: ' + ERROR[err.code] + ' => ' + err.message);
                            //[..]
                        }
                    );
                }
            );

我为这个问题斗争了三天,但没有解决方案。它只是不起作用,而且从来没有。所以我会尝试使用另一种工具,因为cordova不适合用于地理定位。现在我专注于java,我想正确地做到这一点(当我选择cordova时,ios是一个额外的奖励)。

我已经为同样的问题挣扎了一整天,我发现android版的cordova地理定位插件使用了WebView的地理定位功能,不知道为什么,但对于WebView来说,"仅使用gps"是不够的。

所以,我开始寻找一些替代方案https://github.com/louisbl/cordova-locationservices

插件非常棒,但需要安卓播放服务。我已经为地理定位编写了小角度服务:

 multiplatformGeolocation.inject = ['$q'];
    function multiplatformGeolocation ($q) {
        var self = this;
        this.getCurrentPosition = function (opts) {
            var q = $q.defer();
            self.locationModule.getCurrentPosition(function (result) {
                q.resolve(result);
            }, function (err) {
                q.reject(err);
            }, opts || self.positionOptions);
            return q.promise;
        };
        this.init = function () {
            var PRIORITY_BALANCED_POWER_ACCURACY = 102;
            self.positionOptions = {
                timeout: 20000,
                enableHighAccuracy: false,
                priority: PRIORITY_BALANCED_POWER_ACCURACY
            };
            self.locationModule = window.cordova && window.cordova.platformId == 'android' ? LocationServices : navigator.geolocation;
        }
    }

请注意,我使用了PRIORITY_BALANCED_POWER_ACCURACY,它允许设备在禁用gps的情况下使用网络查找当前位置。