Подтвердить что ты не робот

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

У меня есть cordova v3.4.1 для создания приложения для Android и iOS, функция геолокации 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>
4b9b3361

Ответ 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, слава богу.

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

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

Ответ 2

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

1, плагин cordova remove cordova-plugin-geolocation

2, плагин cordova add cordova-plugin-geolocation

3, скопируйте каталог кордоны-плагинов-геолокаций в директорию 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 remove cordova-plugin-geolocation

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

7, андроид теперь, я получил позицию gps хорошо. спасибо за WuZhonghua.