最初に言うことは、バックグラウンドで実行中に位置更新を受信するPhonegapアプリを作成することは完全に可能ですが、簡単なことではないということです。私はそれを自分で行い、AndroidとiOSの両方のプラットフォームでアプリをリリースしました。
正確で定期的な位置更新が必要な場合は、ターゲットデバイスでGPS受信機を使用することをおすすめします。 Phonegapでは、位置の更新を要求するときに、この設定を「highAccuracy」フラグで行うことができます。
navigator.geolocation.watchPosition(successCallback, errorCallback, {
enableHighAccuracy: true,
timeout: 10000,
maximumAge: 0
});
が(詳細はPhonegap geolocation API documentationを参照してください。必要なアクセス許可のことに注意してください。デバイスは、GPS受信機から更新を受信するとしたときに、それをこのようなものを使用するようwatchPosition()関数は、新しい位置情報をお届けしますAndroidとiOSでこの機能を利用するには)
AndroidまたはiOSでバックグラウンドでアプリを実行するには、それぞれのネイティブ開発環境(Android用Eclipse、iOS用XCode)を設定する必要があります。 Phonegap Buildを使用することはできません。両方の場合にカスタム設定が必要となるためです。これを行う方法は、Phonegap platform guidesを参照してください。
Androidのバックグラウンドでアプリを稼働させ続けるには、カスタムAndroidサービスを作成する必要があります。あるいは、Phonegapプラグインを使用して、「部分的な防水」(see here)アプリはバックグラウンドで実行され、画面がオフの間に位置の更新を受け取ります。このプラグインのoriginal versionは古くなっており、最新のバージョンのPhonegapでは動作しません。また、部分的なワケロックもサポートしていません。しかし、私は自分自身のためにそれを更新して拡張しました。その答えのソースコードはthis questionです。
アプリをiOSのバックグラウンドで実行するには、やや異なる方法を実行する必要があります。プラグインは必要なく、プロジェクトの設定だけです。
手動でプロジェクト.plistを編集し、値が "location"のキー "UIBackgroundModes"を追加するか、プロジェクトをXCodeで開いて、 "Required Background Mode"キーに値 " Appは位置更新のために登録する "。これにより、ロケーション更新が受信されるたびにiOSがwatchPosition()で登録したJSコールバック関数をトリガします。 iOSプロジェクトのキーについてはSee here、background modesについては、
希望すると便利です。
あなたの答えをありがとう、私は5分ごとに場所を更新する必要があるだろう、私はそれを制御することができますか?デバイスがインターネットに接続されている限り動作するはずです。 – amarruffo
固定間隔で位置を更新する場合は、タイムアウトを使用してgetCurrentPosition()を呼び出すことができます。 'setTimeout(function(){navigator.geolocation.getCurrentPosition(successCallback、errorCallback、{enableHighAccuracy:true})}、5 * 60 * 1000)'デバイスにGPS受信機がある場合、位置を受け取るためにインターネット接続は必要ありません更新。 – DaveAlden
どうしたらWebサービス経由でデータベースに挿入する必要があるのでしょうか?それはバックグラウンドで動作するのでしょうか?私はどこかで、Webサービスが呼び出されることはありません、これについての任意のアイデアを読みましたか?ご協力いただきありがとうございます。 – amarruffo