电话地理位置总是失败超时

我在我的应用程序中使用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)); } } } 

更新:所以我走出了我的build筑,它的工作…我需要经常出去。
但是,当我禁用GPS,我认为geoLocation会find我的位置使用无线连接 – 但失败(我设置enableHighAccuracy:false)。 这是为什么?

更新:没有人? 好,让我重新说明我的问题:navigator.geolocation.watchPosition假设与GPS信号和wifi / g3信号一起工作吗? 我如何才能使用互联网连接检测用户位置? 目前,我的代码只能使用GPS,当这个选项被禁用或信号被阻止,地理位置不工作…..帮助请!

我知道也许已经太迟了,但是今天我还是遇到了同样的问题! 解决scheme变得非常简单!

解决scheme:重新启动设备。

就这样。

问题是,你永远不知道什么时候我用户会得到这种types的错误,所以如果你的应用程序严重依赖地理定位,我build议你在位置选项navigator.geolocation.getCurrentPosition(geoSuccess, geoError, {timeout: 15000})并提醒用户有关问题和可能的解决scheme。

PS请记住,地理位置可以超时,例如,如果移动数据也closures,所以重新启动不会总是解决它。 在iPhone上它使用蜂窝数据来获得你的位置,但在Android上,它看起来像电话不能访问蜂窝数据,除非3G打开

这听起来很愚蠢,但是,你是否激活了“使用networking”选项?

进入设置 – >位置和安全 – >使用networking; 并激活它。 我整个下午都在看这个问题,就是这样。

我重新启动并重新启动。 我将手机重置为出厂设置。

但没有任何工作。

直到我把enablHighAccuracy从真到假。

而且…田田….它的工作。

所以:

 var options; options = { maximumAge: 30000, timeout: 5000, enableHighAccuracy: false }; 

这用于使用PhoneGap 2.6.0正常工作。 我需要做这个改变,因为我现在使用Phonegap 3.3 – 在Wiko Cink +手机上testing。

尝试从您的项目中删除Phonegap插件地理位置插件。 您不需要对JavaScript代码进行任何更改,因为您的设备将回退到具有相同方法签名的标准HTML5 navigator.geolocationfunction 。

假设你正在使用PhoneGap 3.3,你只需要运行:

 cordova plugin rm org.apache.cordova.geolocation 

如果您正在模拟器上运行,可能是因为设备没有设置地理位置。 尝试通过运行以下设置位置,假设您的Android模拟器是在端口5554上:

 telnet localhost 5554 geo fix -0.001 51.5 

重新启动你的手机或去谷歌地图,并检查是否在那里工作的GPS。 我得到了它的工作。

在将PhoneGap从3.5更新到版本3.6.3后,我发生了这种情况。 在尝试了许多其他build议后,Arthur的答案奏效了。 15秒似乎太长,所以我用{超时:2000}。 我猜测新版本比较慢,因为我的代码在相同设备上更新之前工作正常。 以为我会发post以及对他的赞扬,因为我在Googlefind的所有东西都是关于初始设置的,而且与我的情况大体上无关。

您只需要添加enableHighAccuracy: true, maximumAge: 60000 ,然后重新启动您的设备

从我的试错分析来看,最有可能的是:1.你使用的android版本。 在棒棒糖和更低,你可能需要去电话的位置设置,并启用高精度设置(使用GPS,无线局域网和移动networking来获取位置)。 我必须在kitkat手机上这样做。 2.正如其他人所说的,你可以尝试改变getCurrentPosition的设置,通过启用/禁用highaccuracy和添加超时。 3.如果你使用的是ngCordova,确保你安装了正确的位置函数。 使用控制台来validation

试试这个解决scheme

 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); } 

我已经设法解决….但是,我不知道什么实际上解决了它。 我所做的只是改变我的一个模型的结构。 任何人都可以看到连接到地理位置?