Тайм-аут PhoneGap getCurrentPosition только на устройствах Android 4.0

Я разработал приложение, которое теперь работает в магазине Google Play. Приложение использует метод getCurrentPosition для получения текущего местоположения пользователя.

Я тестировал несколько устройств, и код работает отлично. Эти устройства – Nexus 4, Nexus 5, Samsung Galaxy S3 и S4. Отлично.

Я теперь обнаружил проблемы с приложением на устройствах Android ниже 4.1 (а именно 4.0.4, который кажется наиболее используемой версией, отличной от упомянутой).

Приложение постоянно возвращает ошибку тайм-аута. Я знаю, что службы определения местоположения включены на устройстве.

Я изменил параметры getCurrentPosition и включил maximumAge , timeout и enableHighAccuracy . Я пробовал всевозможные варианты; От разумных тайм-аутов / возрастов, низких тайм-аутов / возрастов до высоких тайм-аутов / возрастов. Я попытался включить enableHighAccuracy в ( true ) и off ( false ) во всех перестановках. Учитывается тайм-аут (например, обратный вызов ошибки не нажимается до тех пор, пока не будет достигнут тайм-аут).

Есть несколько подобных потоков в StackOverflow, но ни одна из них не соответствует моей проблеме. Я попытался выключить устройство, удалить и повторно добавить приложение и перекомпилировать его несколько раз. Тот же вопрос.

Тестируемое устройство – HTC Sensation, но я также пробовал использовать HTC Wildfire, и есть похожие отчеты об ошибках, исходящие от пользователей в дикой природе – все равно.

Ниже приведен пример кода, но, как я уже сказал, я пробовал всевозможные варианты (более высокий возраст, чем тайм-аут, более высокий тайм-аут, чем возраст, высокая точность включения и выключения в обоих случаях и т. Д.).

 if (navigator.geolocation) navigator.geolocation.getCurrentPosition(function(pos) { console.log('Working...'); }, function(error, msg) { console.log(error.code + ' - '+ error.message); }, { maximumAge: 90000, timeout: 9000, enableHighAccuracy: false }); 

LogCat выплевывает: 3 - Position retrieval timed out. at file:///[...] 3 - Position retrieval timed out. at file:///[...]

Обновление : watchPosition на watchPosition не влияет, устройство не найдет местоположение по-прежнему.

Это проблема с устройством, а не проблема с Android (возможно) или Phonegap (конечно). Службы, основанные на местоположении, не работали в Android-браузере по умолчанию или что-либо, что использует собственный браузер (приложение Maps работает DOES).

Я исправил это на устройстве, отключив службы определения местоположения, перезагрузив устройство и перезапустив все службы определения местоположения, заставив повторное принятие условий / сертификатов / и т. Д. Службы местоположения затем возникли в жизни, браузер нашел, где я был, и приложение работало так, как должно.

Нашел несколько человек, жалующихся на это в Интернете, и я испытал это на нескольких устройствах с той же версией Android.

Для меня плагин геолокации не был успешно установлен по какой-либо причине. Запустите cordova plugins list чтобы убедиться, что здесь находится кордона-плагин. Если нет, запустите cordova plugins add cordova-plugin-geolocation . Иногда удаление и повторное добавление плагина или всей платформы также исправляет ошибки.