当位置模式设置为 "Device only" 时,总是会出现关于地理位置的超时
Timeout about geolocation always reached when position mode is set to "Device only"
我拥有一个 Ionic 应用程序 (Cordova)。
我有这段 JS 代码旨在获取 Android 设备的位置:
$cordovaGeolocation.getCurrentPosition({
enableHighAccuracy: true,
timeout: 15000
})
$cordovaGeolocation
来自 ng-cordova 库。
我成功检查了插件 org.apache.cordova.geolocation
是否已更新为最新版本。
一些用户抱怨第一次查询多了 15 秒!
请注意,超时设置为 15000 毫秒 => 15 秒。
这意味着设备没有成功建立位置。
经过调查,我发现了问题所在:
这些用户已将他们的位置模式设置为 "Device Only" 或者在他们的设备设置中也调用了 "GPS only"。
当用户切换到 "High Accuracy mode" 时,整个过程不到一秒钟。
如何在不建议用户切换到 "High accuracy mode" 的情况下解决此问题?
这是一个错误吗?
请注意,我也用 enableHighAccuracy: false
进行了测试,但结果相同。
我不是唯一遇到此 "big" 问题的人:
Phonegap - Geolocation with PowerSaving and GPS Only Mode
但无人接听..
我为这个问题纠结了三天,没有解决办法。它只是不起作用而且从来没有。所以我会尝试使用另一种工具,因为 cordova 不适合用于地理定位目的。现在我专注于 java 并且我想正确地做到这一点(ios 是一个奖励,当我选择 cordova 时)。
我一整天都在为同样的问题苦苦挣扎,我发现 android 的 cordova 地理定位插件使用了 WebView 的地理定位功能,不知道为什么,但是对于 WebView 'gps only' 不够。
所以,我开始寻找一些替代方案并找到 https://github.com/louisbl/cordova-locationservices
插件非常棒,但需要 android 播放服务。我已经为地理定位编写了小型 angular 服务:
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 的情况下使用网络查找当前位置。
我见过你issue on github。
我正在使用 ng-cordova 插件。我使用下面的解决方法让 GPS-only 工作。由于低精度速度更快,超时为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);
//[..]
}
);
}
);
我拥有一个 Ionic 应用程序 (Cordova)。
我有这段 JS 代码旨在获取 Android 设备的位置:
$cordovaGeolocation.getCurrentPosition({
enableHighAccuracy: true,
timeout: 15000
})
$cordovaGeolocation
来自 ng-cordova 库。
我成功检查了插件 org.apache.cordova.geolocation
是否已更新为最新版本。
一些用户抱怨第一次查询多了 15 秒!
请注意,超时设置为 15000 毫秒 => 15 秒。
这意味着设备没有成功建立位置。
经过调查,我发现了问题所在:
这些用户已将他们的位置模式设置为 "Device Only" 或者在他们的设备设置中也调用了 "GPS only"。
当用户切换到 "High Accuracy mode" 时,整个过程不到一秒钟。
如何在不建议用户切换到 "High accuracy mode" 的情况下解决此问题? 这是一个错误吗?
请注意,我也用 enableHighAccuracy: false
进行了测试,但结果相同。
我不是唯一遇到此 "big" 问题的人:
Phonegap - Geolocation with PowerSaving and GPS Only Mode
但无人接听..
我为这个问题纠结了三天,没有解决办法。它只是不起作用而且从来没有。所以我会尝试使用另一种工具,因为 cordova 不适合用于地理定位目的。现在我专注于 java 并且我想正确地做到这一点(ios 是一个奖励,当我选择 cordova 时)。
我一整天都在为同样的问题苦苦挣扎,我发现 android 的 cordova 地理定位插件使用了 WebView 的地理定位功能,不知道为什么,但是对于 WebView 'gps only' 不够。
所以,我开始寻找一些替代方案并找到 https://github.com/louisbl/cordova-locationservices
插件非常棒,但需要 android 播放服务。我已经为地理定位编写了小型 angular 服务:
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 的情况下使用网络查找当前位置。
我见过你issue on github。 我正在使用 ng-cordova 插件。我使用下面的解决方法让 GPS-only 工作。由于低精度速度更快,超时为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);
//[..]
}
);
}
);