Ответ 1
Наконец-то я решил проблему, теперь на моем телефоне Android, getCurrentPosition
функция возвращать информацию о местоположении очень быстро каждый раз, мне больше не нужно перезагружать мой телефон!
Я не уверен, что у плагина geolaation v7.4.1s есть ошибки.
Причиной возникновения этой проблемы является то, что мы всегда используем функцию браузера 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, если он работает нормально
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
}
check 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" />
check 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, слава богу.
если у вас все еще есть проблема, попробуйте установить плагин для очистки кеша веб-просмотра: