Телефонная геолокация иногда не работает на android

Я использую cordova v3.4.1 для создания android и ios app, на ios функция геолокации возвращается очень быстро и отлично работает всегда, но на андроиде, иногда она не работает.

Странная вещь – после того, как я перезагружу свой Android-телефон, он работает нормально. Более чем через несколько часов геолокация быстро становится позицией как в Wi-Fi, так и в 3G.

Но после часов сервлетов я снова открываю приложение, геолокация не может работать. Иногда, когда я нахожусь снаружи, он может получать посты со спутником gps, но очень медленно, часто возникает ошибка тайм-аута.

Я пытаюсь удалить приложение и повторно установить его снова, но проблема все еще существует, если не перезагружать мой телефон Android. Когда я перезагружаю свой телефон Android, функция геолокации снова работает в будущем в течение нескольких часов.

У меня есть тестовый сервомобильный телефон Android, такой как samsang note2, galaxy4 и т. Д., Все они имеют ту же проблему. Когда я перезагружаю его, они могут получить местоположение очень остро.

Эта проблема долго меня беспокоила, так что кто-нибудь мне помогает?

Вот мой код ниже:

navigator.geolocation.getCurrentPosition(function(pos){ cb(null,pos) },function(errMsg){ navigator.geolocation.getCurrentPosition(function(pos){ cb(null,pos) },function(errMsg){ cb(errMsg) }, { enableHighAccuracy: true, timeout: 60*1000*2, maximumAge: 1000*60*10 }); }, { enableHighAccuracy: false, timeout: 10*1000, maximumAge: 1000*60*10 }); 

My config.xml:

 <feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" /> </feature> 

Наконец, я решил проблему, теперь на моем телефоне Android, getCurrentPosition функция возвращает информацию о местоположении очень быстро каждый раз, мне больше не нужно перезагружать мой телефон! Я не уверен, что плагин geoloation cordova v3.4.1 имеет ошибки.

Причина возникновения этой проблемы заключается в том, что мы всегда используем функцию navigator.geolocation.getCurrentPosition для определения местоположения, поэтому мы должны позволить программе использовать кордовую реализацию cordova вместо html5.

Вот решение с кордовой v3.4.1, надеюсь, что это может вам помочь, на самом деле он разрешил мой вопрос.

Решить шаг:

1. удалить org.apache.cordova.geolocation

 $ cordova plugin rm org.apache.cordova.geolocation 

2. Установите новый плагин org.apache.cordova.geolocation.

 $ cordova plugin add org.apache.cordova.geolocation 

3. Скопируйте плагин на e: \

Введите папку плагина, например «YOUR_APP_FOLDER \ plugins»,

Скопируйте отверстие org.apache.cordova.geolocation в E:\org.apache.cordova.geolocation

4. снова удалите плагин

 $ cordova plugin rm org.apache.cordova.geolocation 

5.edit plugin.xml в E:\org.apache.cordova.geolocation\plugin.xml

Отредактируйте файл plugin.xml, как показано ниже:

 ... ... <name>Geolocation</name> <description>Cordova Geolocation Plugin</description> <license>Apache 2.0</license> <keywords>cordova,geolocation</keywords> <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git</repo> <issue>https://issues.apache.org/jira/browse/CB/component/12320638</issue> <!-- android Code Comments <platform name="android"> <config-file target="AndroidManifest.xml" parent="/*"> <uses-permissionandroid android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> </config-file> </platform> --> <!-- amazon-fireos change to android--> <platform name="android"> <js-module src="www/Coordinates.js" name="Coordinates"> <clobbers target="Coordinates" /> </js-module> <js-module src="www/PositionError.js" name="PositionError"> <clobbers target="PositionError" /> </js-module> <js-module src="www/Position.js" name="Position"> <clobbers target="Position" /> </js-module> <js-module src="www/geolocation.js" name="geolocation"> <clobbers target="navigator.geolocation" /> </js-module> <config-file target="res/xml/config.xml" parent="/*"> <feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker"/> </feature> </config-file> <config-file target="AndroidManifest.xml" parent="/*"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> </config-file> <source-file src="src/amazon/GeoBroker.java" target-dir="src/org/apache/cordova/geolocation" /> <source-file src="src/amazon/GPSListener.java" target-dir="src/org/apache/cordova/geolocation" /> <source-file src="src/amazon/NetworkListener.java" target-dir="src/org/apache/cordova/geolocation" /> <source-file src="src/amazon/CordovaLocationListener.java" target-dir="src/org/apache/cordova/geolocation" /> </platform> <!-- ios --> <platform name="ios"> ... ... 

6.add плагин снова

 $ cordova plugin add E:\org.apache.cordova.geolocation 

7, запустить build commond

 $ cordova build android 

8.check, если он работает нормально

Проверьте, что YOUR_APP\plugins\android.json должен включать:

 { "xml": "<feature name=\"Geolocation\"><param name=\"android-package\" value=\"org.apache.cordova.geolocation.GeoBroker\" /></feature>", "count": 1 }, ... ... { "xml": "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />", "count": 4 }, { "xml": "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />", "count": 4 }, { "xml": "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\" />", "count": 1 } 

Проверьте YOUR_APP\platforms\android\AndroidManifest.xml должен включать:

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 

Проверьте YOUR_APP\platforms\android\res\xml\config.xml должен включать:

 <feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" /> </feature> 

9.пройти приложение

Напишите код geelocation, чтобы получить lat и lng:

 navigator.geolocation.getCurrentPosition(function(pos){ alert('suc') alert(JSON.stringify(pos)) },function(errMsg){ alert(JSON.stringify(errMsg)) navigator.geolocation.getCurrentPosition(function(pos){ alert('suc') alert(JSON.stringify(pos)) },function(errMsg){ alert(JSON.stringify(errMsg)) }, { enableHighAccuracy: true, timeout: 60*1000*2, maximumAge: 1000*60*10 }); }, { enableHighAccuracy: false, timeout: 60*1000, maximumAge: 1000*60*10 

});

Если ваша поддержка по телефону использует wifi / 3G locate, мы сразу получим местоположение, иначе вы увидите errMsg timeout а затем geolocation будет использовать gps для определения местоположения с помощью встроенного средства.

Теперь мы получаем lat и lng, и никогда не нужно перезагружать Android-агонию Android, слава богу.

Если у вас все еще есть проблема, попробуйте установить плагин для очистки кеша веб-просмотра:

https://github.com/moderna/cordova-plugin-cache

На кордове v5.3.3, вам нужно сделать следующее:

1, плагин cordova удалить cordova-plugin-geolocation

2, плагин cordova добавить кордову-плагин-геолокацию

3, скопируйте каталог cordola-plugin-geolocation в директорию plguins в e: \

4, отредактируйте файл plugin.xml, добавьте следующее:

 <js-module src="www/Coordinates.js" name="Coordinates"> <clobbers target="Coordinates" /> </js-module> <js-module src="www/PositionError.js" name="PositionError"> <clobbers target="PositionError" /> </js-module> <js-module src="www/Position.js" name="Position"> <clobbers target="Position" /> </js-module> <js-module src="www/geolocation.js" name="geolocation"> <clobbers target="navigator.geolocation" /> </js-module> <config-file target="res/xml/config.xml" parent="/*"> <feature name="Geolocation"> <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker"/> </feature> </config-file> <config-file target="AndroidManifest.xml" parent="/*"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> </config-file> 

5, плагин cordova удалить cordova-plugin-geolocation

6, плагин cordova добавить e: \ cordova-plugin-geolocation

7, теперь я знаю, что у меня есть gps. Спасибо за WuZhonghua.

Intereting Posts
Ошибка использования eclipse для Android – не найден ресурс, соответствующий указанному имени Android Facebook SDK v4 Проблема с просмотром API Google Адресов в Android – API_KEY для отдельных пользователей Повторное кодирование содержимого h.264 с другой скоростью передачи данных с помощью Android MediaCodec JNI сохраняет глобальную ссылку на объект, обращаясь к нему с помощью других методов JNI. Сохранение объекта C ++ для нескольких вызовов JNI Android Maps – ограничение на 180 градусов Обновить настройки в PreferenceActivity on Resume «ItemizedOverlay» не может быть разрешено для типа Приложения iPhone или Android, использующие аутентификацию на основе SMS? Попытка заполнить ListView на Android с помощью объектов из Parse Ошибка переоснащения 2 + Rxjava Скрыть уведомление об обслуживании переднего плана, пока активность видна Как создать Webapp для iOS, Android, BBerry, Symbian Кто-нибудь знает правду о поддержке разъема USB для RJ45 на устройствах Android? Android: Как использовать SensorManager.getAltitude (float p0, float p)?