コルドバv3.4.1を使用してAndroidとiOSアプリを構築しています。iOSのジオロケーション機能は非常に速く戻り、常に正常に動作しますが、Androidでは動作しない場合があります。
奇妙なことに、Android電話を再起動した後、それは正常に動作します。数時間以上で、地理位置情報がwifiと3Gの両方で非常に迅速に表示されます。
しかし、サーバー時間後、私は再びアプリを開くと、地理位置情報が機能しません。時々私が外にいるとき、それはgps衛星で位置を取得できますが、非常に遅く、しばしばタイムアウトエラーが発生します。
アプリを削除して再インストールしようとしましたが、問題がまだあります。ただし、再起動しない限り、Android phone。リブートしたときに、Android phone、geolocation function今後数時間で再び正常に動作します。
私はsamsang note2、galaxy4などのテストサーバーAndroidの携帯電話を持っていますが、すべて同じ問題があります。再起動すると、非常に素早く場所を取得できます。
この問題は長い間私を悩ませてきたので、誰かが私を助けましたか?
以下は私のコードです:
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
});
私のconfig.xml:
<feature name="Geolocation">
<param name="Android-package" value="org.Apache.cordova.geolocation.GeoBroker" />
</feature>
最後に私は問題を解決しました。今度は私のAndroid電話、getCurrentPosition
関数が位置情報を非常に迅速に返すので、電話を再度再起動する必要はありません!よくわかりませんwether cordova v3.4.1のgeoloationプラグインにはバグがあります。
この問題が発生する理由は、常にブラウザーのnavigator.geolocation.getCurrentPosition
関数を使用して位置を特定するためです。そのため、アプリでhtml5ではなくCordovaネイティブ実装を使用する必要があります。
これがcordova 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 .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.プラグインを再度追加する
$ cordova plugin add E:\org.Apache.cordova.geolocation
7、ビルドcommondを実行します
$ cordova build Android
8.正常に動作するかどうかを確認します
チェック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コードを記述します。
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を使用している場合は、位置情報をすぐに取得します。それ以外の場合は、errMsg timeout
が表示され、geolocation
はgpsを使用してネイティブ実装の位置を検索します。
latとlngを取得しました。再起動する必要はありませんAndroid phone agian、ありがとうございます。
それでも問題が解決しない場合は、プラグインをインストールしてwebviewキャッシュをクリーンアップしてください:
コルドバv5.3.3では、これを行う必要があります:
1、cordovaプラグインはcordova-plugin-geolocationを削除します
2、cordovaプラグインはcordova-plugin-geolocationを追加します
3、plguinsディレクトリのcordova-plugin-geolocationディレクトリを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、cordova run Android=さて、gpsの位置がわかりました。WuZhonghuaに感謝します。