2015-05-23 2 views
4

Я установил Кордова 5.0.0 с помощью этих плагинов:геолокации плагин на Кордова 5.0.0 всегда возвращает таймауту ошибку

список Cordova плагин

cordova-plugin-device 1.0.1-dev "Device" 
cordova-plugin-geolocation 1.0.0 "Geolocation" 
cordova-plugin-globalization 1.0.0 "Globalization" 
cordova-plugin-inappbrowser 1.0.1-dev "InAppBrowser" 
cordova-plugin-network-information 1.0.0 "Network Information" 
cordova-plugin-whitelist 1.0.1-dev "Whitelist" 

Запуск этого кода на любой андроид виртуального устройства:

onDeviceReady: function() { 

    var onSuccess = function(position) { 
     alert('Latitude: '   + position.coords.latitude   + '\n' + 
       'Longitude: '   + position.coords.longitude   + '\n' + 
       'Altitude: '   + position.coords.altitude   + '\n' + 
       'Accuracy: '   + position.coords.accuracy   + '\n' + 
       'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' + 
       'Heading: '   + position.coords.heading   + '\n' + 
       'Speed: '    + position.coords.speed    + '\n' + 
       'Timestamp: '   + position.timestamp    + '\n'); 
    }; 

    // onError Callback receives a PositionError object 
    function onError(error) { 
     alert('code: ' + error.code + '\n' + 
       'message: ' + error.message + '\n'); 
    } 
    var options = { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true }; 
    navigator.geolocation.getCurrentPosition(onSuccess, onError, options); 
} 

Возврат:

D/CordovaNetworkManager(1239): Connection Type: 3g 
D/CordovaNetworkManager(1239): Connection Extra Info: epc.tmobile.com 
D/CordovaWebViewImpl(1239): onPageFinished(file:///android_asset/www/index.html) 
D/dalvikvm(1239): GC_EXTERNAL_ALLOC freed 457K, 49% free 3174K/6151K, external 901K/1038K, paused 3ms 
I/InputReader( 843): Device reconfigured: id=0x0, name=qwerty2, display size is now 240x400 
I/InputManager-Callbacks( 843): No virtual keys found for device qwerty2. 
D/SystemWebChromeClient(1239): file:///android_asset/www/js/app.js: Line 127 : code: 3 
D/SystemWebChromeClient(1239): message: Timeout expired 

Почему всегда истекает время ожидания?

+0

Вы нашли решение? Я тоже ищу ответ. –

+0

Надеюсь на ответ, тоже. – Codecat

+0

@RobsonBraga Я нашел рабочий ответ (для меня) здесь: http://stackoverflow.com/questions/12859425/phonegap-geolocation-allways-fail-on-timeout – Codecat

ответ

1

Я нашел ответ here, который, казалось, работать для меня:

Просто перезагрузки устройства.

Работал для меня, надеюсь, для вас тоже.

+0

Это также 99% времени не поможет. См. Мой ответ. – xendi

8

Это может звучать глупо, но активировали ли вы функцию «GPS» в своем телефоне?

+0

omg ... это был случай: O – CodeGems

+0

Это 99% времени не в этом случае. См. Мой ответ. – xendi

+0

такой же здесь. удивительно, что он работал как шарм после перезапуска – ArkoD

1

Я использую Samsung Tab S. Он работал для меня, когда я удалил maximumAge и таймаута из watchOptions, как показано ниже:

var watchOptions = { 
    enableHighAccuracy: true 
}; 

var watch = $cordovaGeolocation.watchPosition(watchOptions); 
2

я, наконец, решил все причины, почему это происходит. Это связано с двумя вариантами: maximumAge и timeout. Вы можете найти свое приложение на устройстве и/или эмуляторе. В моем случае, оба. Телефон GPS работал больше, чем эмулятор. Услуги определения местоположения должны быть включены на устройстве. Вам также нужно установить тайм-аут, или он будет сглажен. Для эмулятора вам необходимо отправить данные GPS в ваше приложение с помощью настроек эмулятора, а maximumAge должно быть установлено на номер (в миллисекундах) выше, чем вы его отправили.

У меня также есть установка шахты, так что если происходит ошибка, она пытается снова с помощью вызова функции, как это так, он будет продолжать пытаться, пока не получит его:

function gpsRetry(gpsOptions) { 
    navigator.geolocation.getCurrentPosition(gpsSuccess, gpsError, gpsOptions); 
} 

Моя функция ошибок, как это:

function gpsError(error, gpsOptions) { 
    alert('code: ' + error.code + "\n" + 
      'message: ' + error.message + "\n"); 
    gpsRetry(gpsOptions); 

} 

и моя функция успеха, как это:

function gpsSuccess(position) { 
    alert('Latitude: '   + position.coords.latitude   + "\n" + 
      'Longitude: '   + position.coords.longitude   + "\n" + 
      'Altitude: '   + position.coords.altitude   + "\n" + 
      'Accuracy: '   + position.coords.accuracy   + "\n" + 
      'Altitude Accuracy: ' + position.coords.altitudeAccuracy + "\n" + 
      'Heading: '   + position.coords.heading   + "\n" + 
      'Speed: '    + position.coords.speed    + "\n" + 
      'Timestamp: '   + position.timestamp    + "\n"); 
} 

Затем положить все toget ее с чем-то вроде этого в вашем onDeviceReady блоке:

let gpsOptions = {maximumAge: 300000, timeout: 5000, enableHighAccuracy: true}; 
navigator.geolocation.getCurrentPosition(gpsSuccess, gpsError, gpsOptions); 

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

Send GPS coordinates to Android emulator

После того, как вы сделаете это, так как ваше приложение всегда повторяет попытку, затем оно должно вывести предупреждение с помощью координат GPS.

Смежные вопросы