Phonegap geolocation czasami nie działa na Androidzie

Używam cordova v3.4. 1 do budowania aplikacji na Androida i ios, na iOS funkcja geolokalizacji wraca bardzo szybko i działa dobrze zawsze, ale na Androidzie czasami nie działa.

Dziwne jest to, że po ponownym uruchomieniu telefonu z Androidem działa dobrze. W ciągu kilku godzin Geolokalizacja bardzo szybko otrzymuje pozycję zarówno w wifi, jak i 3G.

Ale po godzinach serwalu, otwieram aplikację ponownie, Geolokalizacja nie może działać.Czasami, gdy na zewnątrz, może uzyskać pozycjonowanie z gps Satelita, ale bardzo powolny, często występują błędy timeout.

Próbuję usunąć aplikację i ponownie zainstalować ją ponownie, ale problem nadal istnieje, chyba że uruchom ponownie telefon z Androidem.po ponownym uruchomieniu telefonu z Androidem funkcja geolokalizacji działa ponownie w przyszłości za kilka godzin.

[2]}mam testowy telefon serval z Androidem, taki jak samsang note2, galaxy4 itp., wszystkie mają ten sam problem.po ponownym uruchomieniu mogą uzyskać lokalizację bardzo quicly.

Ten problem niepokoił mnie od dawna, więc ktoś mi pomoże?

Oto Mój kod poniżej:

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
});

Mój config.xml:

<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />
</feature>
Author: WuZhonghua, 2014-04-30

2 answers

Wreszcie mam rozwiązać problem, teraz na moim telefonie z Androidem, getCurrentPosition funkcja zwraca informacje o lokalizacji bardzo szybko za każdym razem, nigdy nie trzeba ponownie uruchomić telefonu! Nie jestem pewien wether cordova v3.4.1 za geoloation plugin ma błędy.

Powodem wystąpienia tego problemu jest zawsze używać przeglądarki navigator.geolocation.getCurrentPosition funkcja zlokalizować pozycję, więc musimy pozwolić aplikacji używać cordova natywnej implementacji zamiast html5.

Oto rozwiązanie z cordova v3.4.1, mam nadzieję, że może pomóc ty, w rzeczywistości to rozwiązało moje pytanie.

Rozwiąż krok:

1.Usuń org.Apacz.cordova.Geolokalizacja

$ cordova plugin rm org.apache.cordova.geolocation

2.zainstaluj ponownie nową org.Apacz.cordova.wtyczka geolokalizacyjna

$ cordova plugin add org.apache.cordova.geolocation

3.skopiuj wtyczkę do e:\

Wprowadź folder wtyczek ,na przykład 'YOUR_APP_FOLDER \ plugins\'

Skopiuj otwór org.apache.cordova.geolocation do E:\org.apache.cordova.geolocation

4.Usuń ponownie wtyczkę

$ cordova plugin rm org.apache.cordova.geolocation

5.edytuj plugin.xml w E:\org.apache.cordova.geolocation\plugin.xml

Edycja wtyczki.plik xml jak poniżej:

... ...
<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.Dodaj ponownie wtyczkę

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

7 run run build commond

$ cordova build android

8.sprawdź, czy działa dobrze

Kontrola YOUR_APP\plugins\android.json musi zawierać:

{
   "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
 }

Kontrola YOUR_APP\platforms\android\AndroidManifest.xml musi zawierać:

<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" />

Kontrola YOUR_APP\platforms\android\res\xml\config.xml musi zawierać:

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

9.uruchom aplikację

Aby uzyskać LNG i LNG, należy wpisać kod geelocation:
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

});

Jeśli Twój telefon obsługuje wifi / 3G zlokalizuj, natychmiast uzyskamy lokalizację, w przeciwnym razie zobaczysz errMsg timeout a następnie {[20] } użyje gps do zlokalizowania pozycji za pomocą natywnej implementacji.

[21]}teraz mamy lat i lng, i nigdy nie trzeba ponownie uruchomić telefonu z Androidem agian, dzięki Bogu.

Jeśli nadal masz problem, spróbuj zainstalować wtyczkę do czyszczenia pamięci podręcznej webview:

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

 15
Author: WuZhonghua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 14:00:59

Na cordova v5. 3. 3, Musisz to zrobić:

1, cordova plugin usunąć cordova-plugin-geolocation

2、cordova plugin dodać cordova-plugin-geolocation

3, skopiować cordova-plugin-katalog geolocation w katalogu plguins do e:\

4.edycja wtyczki.xml, dodaj to:

<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 Cord cordova plugin usunąć cordova-plugin-geolocation

6、cordova plugin dodaj e:\cordova-plugin-geolocation

7、cordova run android teraz mam pozycję gps cóż. dzięki za WuZhonghua.

 0
Author: user2147549,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-20 06:49:59