我正在使用phonegap应用程序中的地理位置。当高精度和省电模式开启时,我很容易获得位置。但它在GPS工作时会出错。请帮忙。我被困在里面。
我将超时应用到60000毫秒。但它即使在那时也没有用。
代码是 -
function Geolocation(){}
Geolocation.options = {
maximumAge: 60000,
timeout: 15000,
enableHighAccuracy: true
};
Geolocation.errorMessage = 'Unable to get location data. Ensure that the location services are enabled in high accuracy mode. If enabled, try turning off/on location services and open this page again';
Geolocation.update = function() {
navigator.geolocation.getCurrentPosition(Geolocation.updateSuccess, Geolocation.highAccuracyError, Geolocation.options);
}
Geolocation.highAccuracyError = function(err) {
if (err.code == 3) {
var options = Geolocation.options;
options.enableHighAccuracy = false;
options.timeout = 15000;
navigator.geolocation.getCurrentPosition(Geolocation.updateSuccess, Geolocation.lowAccuracyError, options);
}
}
Geolocation.lowAccuracyError = function(err) {
Geolocation.currentLocation = null;
}
Geolocation.updateSuccess = function(position) {
Geolocation.currentLocation = {};
Geolocation.currentLocation.latitude = position.coords.latitude;
Geolocation.currentLocation.longitude = position.coords.longitude;
}
提前致谢
答案 0 :(得分:1)
@megha, GPS有两个问题。
1)在Android上,您必须开启所有位置服务,包括GPS卫星,Google的位置服务和快速GPS。否则,您将收到该超时错误。
我认为谷歌是故意破坏它的。它不像那样。
2)当使用GPS时,必须处于运动中 - 走动至少20英尺(即使它是一个圆圈),而你必须至少3颗卫星的现场线。大多数人通过在开放区域 - 例如足球场或停车场来解决这个最后的问题。
杰西
答案 1 :(得分:0)
您应该尝试使用watchPosition()
代替getCurrentPosition()
。
getCurrentPosition()
在当前时间点对设备位置发出单一请求,因此位置超时可能会在设备上的GPS硬件有机会获得定位之前发生。
我建议使用watchPosition()
来设置观察程序,每当操作系统从GPS硬件接收位置更新时,它将调用成功函数。
因此,根据您当前的代码,例如:
function Geolocation(){}
Geolocation.watchID;
Geolocation.minAccuracyInMetres = 50;
Geolocation.options = {
maximumAge: 60000,
timeout: 15000,
enableHighAccuracy: true
};
Geolocation.errorMessage = 'Unable to get location data. Ensure that the location services are enabled in high accuracy mode. If enabled, try turning off/on location services and open this page again';
Geolocation.update = function() {
Geolocation.watchID = navigator.geolocation.watchPosition(Geolocation.updateSuccess, Geolocation.highAccuracyError, Geolocation.options);
}
Geolocation.highAccuracyError = function(err) {
if (err.code == 3) {
var options = Geolocation.options;
options.enableHighAccuracy = false;
options.timeout = 15000;
navigator.geolocation.getCurrentPosition(Geolocation.updateSuccess, Geolocation.lowAccuracyError, options);
}
}
Geolocation.lowAccuracyError = function(err) {
Geolocation.currentLocation = null;
}
Geolocation.updateSuccess = function(position) {
// Reject if accuracy is not sufficient
if(position.coords.accuracy > Geolocation.minAccuracyInMetres){
return;
}
// If only single position is required, clear watcher
navigator.geolocation.clearWatch(Geolocation.watchID);
Geolocation.currentLocation = {};
Geolocation.currentLocation.latitude = position.coords.latitude;
Geolocation.currentLocation.longitude = position.coords.longitude;
}
答案 2 :(得分:0)
完全有可能您的手机根本无法获得基于GPS硬件的位置。例如,如果您在地下,您的手机将无法连接到GPS卫星。你并不需要在地下这样做。根据您的说法,我认为Cordova正确地向您报告手机无法确定其位置。