我在我的应用中使用sencha-touch 2.0和phonegap 2.0.0来检索用户的位置。 在我的locahost上运行时,一切正常。但是,当将.apk加载到我的Android 15 api的设备(使用eclipse和adt插件)时,每次调用getCurrentLocation或watchPosition都不会返回...
这是我的代码:
geoOn: function(){
var geoReady = navigator.geolocation || undefined;
var onSuccess = function(position){
Top5.app.alert('Geolocation success '+String(position.coords.latitude) + ' ' + String(position.coords.longitude),'Geolocation');
var scope = Ext.getCmp('nestedList');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert('Geolocation failed: '+String(error.code) + ' '+String(error.message),'Geolocation');};
if (geoReady) {
this.watchId = navigator.geolocation.watchPosition(onSuccess ,onFailure,{timeout:6000,maximumAge: 3000,enableHighAccuracy: true});
}
else{
Ext.device.Geolocation.watchPosition({
frequency: 3000, // Update every 3 seconds
callback: function(position) {
this.updateDistance(position.coords);
},
failure: function() {
console.log('Geolocation Failure!');
},
scope:this
});
}
},
geoGet: function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
var onSuccess = function(position){
Top5.app.alert('Geolocation successful!!!');
var scope = Ext.getCmp('nestedList');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert('Geolocation failed: '+String(error.code) + ' '+String(error.message),'Geolocation');};
navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
}
else{}
},
geoOff:function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
navigator.geolocation.clearWatch(this.watchId);
this.watchId = null;
}
else{
Ext.device.Geolocation.clearWatch();
}
},
updateDistance:function(coords){
Top5.app.alert('updateDist','');
var scope = Ext.getCmp('nestedList');
var lat = coords.latitude,lon = coords.longitude;
var store = scope.getStore();
var i,record;
for(i = 0; i < store.data.all.length; i++)
{
record = store.data.all[i];
if(record.data.locationX){
record.set('distance',Top5.app.getDistance(record.data.locationX,record.data.locationY,lat,lon).toFixed(3));
}
}
}
更新:所以我走出了我的大楼,它工作了......我需要经常外出。
但是,当我禁用gps时,我认为geoLocation将使用wifi连接找到我的位置 - 但它很复杂(我设置enableHighAccuracy:false)。那是为什么?
更新:让我重新解释一下我的问题: navigator.geolocation.watchPosition是否可以同时使用GPS信号和wifi / g3信号?如何仅使用互联网连接检测用户位置?目前,我的代码仅适用于GPS,当该选项被禁用或信号被阻止时,地理位置无效。
答案 0 :(得分:31)
我知道也许为时已晚,但今天我在同样的问题上挣扎了!解决方案变得非常简单!
解决方案:重启设备。
这就是全部。
问题是,你永远不知道我的用户什么时候会遇到这种错误,所以如果你的应用程序在很大程度上依赖于地理位置,我建议你在位置选项navigator.geolocation.getCurrentPosition(geoSuccess, geoError, {timeout: 15000})
中设置一个超时,并提醒用户有关问题和可能的解决方案。
P.S。 请记住,Geolocation可能会超时,例如,如果移动数据也被关闭,那么重启并不会始终修复它。在iPhone上,它使用移动数据来获取您的位置,但在Android上,看起来手机无法访问移动数据,除非3G已开启
答案 1 :(得分:7)
这听起来很愚蠢,但是,您是否激活了“使用网络”选项?
转到设置 - &gt;位置和安全 - &gt;使用网络;并激活它。我整个下午都在看着这个问题,就是这样。
答案 2 :(得分:5)
我重新启动并重新启动。我将手机重置为出厂设置。
但没有任何效果。
直到我将enablHighAccuracy从true设置为false。
而且...... Tada ....它有效。
所以:
var options;
options = {
maximumAge: 30000,
timeout: 5000,
enableHighAccuracy: false
};
这曾经使用PhoneGap 2.6.0正常工作。我需要做出这个改变,因为我现在正在使用Phonegap 3.3 - 在Wiko Cink +手机上测试过。
答案 3 :(得分:2)
如果您在模拟器上运行,可能是因为该设备没有地理位置集。尝试通过运行以下命令来设置位置,假设你的android模拟器在5554端口:
telnet localhost 5554
geo fix -0.001 51.5
答案 4 :(得分:1)
尝试从项目中删除Phonegap插件地理位置插件。您无需对JavaScript代码进行任何更改,因为您的设备将退回到具有相同方法签名的standard HTML5 navigator.geolocation functionality上。
假设你正在使用PhoneGap 3.3,你只需要运行:
cordova plugin rm org.apache.cordova.geolocation
答案 5 :(得分:0)
重新启动手机或转到谷歌地图,检查gps是否正在那里工作。 我搞定了。
答案 6 :(得分:0)
在将PhoneGap从3.5更新到版本3.6.3后,我发生了这种情况。在尝试了许多其他建议后,亚瑟的回答奏效了。 15秒对我来说似乎太长了所以我使用{timeout:2000}。我猜测新版本速度较慢,因为我的代码在相同设备上更新之前工作正常。我以为我发布的内容以及赞助他,因为我在谷歌找到的所有内容都是关于初始设置,而且与我的情况无关。
答案 7 :(得分:0)
您只需添加enableHighAccuracy: true, maximumAge: 60000
,然后重新启动您的设备。
答案 8 :(得分:0)
从我的试错分析中,最有可能: 1.您正在使用的Android版本。在Lollipop及更低版本上,您可能需要转到手机位置设置并启用高精度设置(使用gps,wlan和移动网络获取位置)。我必须在kitkat手机上这样做。 2.正如其他人所提到的,您可以通过启用/禁用高精度和添加超时来尝试更改getCurrentPosition的设置。 3.如果您正在使用ngCordova,请确保已正确安装并且实际调用了位置功能。使用控制台验证
答案 9 :(得分:0)
尝试此解决方案:
window.setInterval(checkPosition, 5000);
function checkPosition() {
function onSuccess(position) {
document.getElementById('result1').innerHTML = position.coords.latitude;
document.getElementById('result2').innerHTML = position.coords.longitude;
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
答案 10 :(得分:-1)
我已经设法解决了....但是,我不知道究竟是什么解决了它。我所做的就是改变我的模型结构之一。任何人都可以看到与地理位置的连接吗?