Телефонная геолокация всегда сбой при тайм-ауте

Я использую 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 найдет мое местоположение, используя Wi-Fi соединение, но он не работает (я устанавливаю enableHighAccuracy: false). Почему это?

ОБНОВЛЕНИЕ: Никто? Хорошо, позвольте мне перефразировать мой вопрос: Предполагается ли navigator.geolocation.watchPosition работать как с сигналом GPS, так и с сигналами wifi / g3? Как я могу определить местоположение пользователя, используя только подключение к Интернету? В настоящее время мой код работает только с GPS, и когда эта опция отключена или сигнал заблокирован, геолокация не работает ….. ПОМОЩЬ ПОЖАЛУЙСТА!

Solutions Collecting From Web of "Телефонная геолокация всегда сбой при тайм-ауте"

Я знаю, что, может быть, уже слишком поздно, но сегодня я боролся с той же проблемой! Решение оказалось очень простым!

РЕШЕНИЕ: Перезагрузите устройство.

Это все.

Проблема в том, что вы никогда не знаете, когда пользователь получит такую ​​ошибку, поэтому, если ваше приложение сильно зависит от геолокации, я рекомендую вам установить таймаут в параметрах местоположения navigator.geolocation.getCurrentPosition(geoSuccess, geoError, {timeout: 15000}) И предупредить пользователя о проблеме и возможном решении.

PS Имейте в виду, что Geolocation может отключиться, например, если мобильные данные также отключены, поэтому перезагрузка не всегда будет исправлена. На iPhone он использует сотовые данные, чтобы получить вашу позицию, но на Android, похоже, что у телефона нет доступа к сотовой информации, если 3G не включен

Это может показаться глупым, но активировал ли вы параметр «Использовать сети»?

Перейдите в Настройки -> Местоположение и безопасность -> Использовать сети; И активировать его. Я прошел весь день, наблюдая за проблемой, и все.

Я перезапустил и перезапустил. Я переустановил свой телефон на заводские настройки.

Но ничего не получилось.

Пока я не установлю enablHighAccuracy от true до false.

И … Тада …. это работает.

Так :

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

Это использовалось для работы с использованием PhoneGap 2.6.0. Мне нужно было сделать это изменение, так как теперь я использую Phonegap 3.3 – протестирован на телефоне Wiko Cink +.

Попробуйте удалить плагин геолокации плагинов Phonegap из вашего проекта. Вам не нужно будет вносить какие-либо изменения в ваш код JavaScript, поскольку ваше устройство будет возвращаться к стандартной функциональности HTML5 navigator.geolocation, которая имеет такую ​​же подпись метода.

Предполагая, что вы используете PhoneGap 3.3, вам просто нужно запустить:

 cordova plugin rm org.apache.cordova.geolocation 

Если вы работаете на эмуляторе, возможно, это связано с тем, что у устройства нет набора геолокации. Попробуйте установить местоположение, выполнив следующее, если ваш эмулятор Android находится на порту 5554:

 telnet localhost 5554 geo fix -0.001 51.5 

Перезагрузите телефон или перейдите на карту google и проверьте, работает ли там gps. Я заработал.

У меня это случилось с рабочим приложением после обновления PhoneGap до версии 3.6.3 из 3.5. Попробовав много других предложений, Артур ответил. 15 секунд казались слишком длинными для меня, поэтому я использовал {timeout: 2000}. Я предполагаю, что новая версия работает медленнее, так как мой код работал отлично до обновления на тех же устройствах. Думал, что я опубликовал бы так же хорошо, как и все, что я нашел в Google, о начальной настройке и в основном не относящейся к моей ситуации.

Вам просто нужно добавить enableHighAccuracy: true, maximumAge: 60000 а затем перезагрузить устройство .

Из моего анализа проб и ошибок наиболее вероятно: 1. Версия Android, которую вы используете. На Lollipop и ниже вам может потребоваться перейти к настройкам местоположения телефона и включить высокоточные настройки (с помощью gps, wlan и мобильных сетей, чтобы получить местоположение). Я должен был сделать это на телефоне kitkat. 2. Как отмечали другие, вы можете попробовать изменить настройки getCurrentPosition, включив / отключив высокую точность и добавив тайм-аут. 3.Если вы используете ngCordova, убедитесь, что вы установили его правильно, и функции местоположения на самом деле вызываются. Использовать консоль для проверки

Попробуйте это решение:

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

Мне удалось это выработать … Однако я понятия не имею, что на самом деле решило. Все, что я сделал, это изменить одну из структур моей модели. Может ли кто-нибудь увидеть подключение к геолокации?