フォアグラウンドとバックグラウンドで動作し、位置データを送信する必要があるアプリに取り組んでいます。私はまだコードを記述しておらず、CoreLocationがどのように機能してどのアプローチに従うかを決定する方法に精通しています。私がこれまでに行った読書から、私はそれを収集します:
startMonitoringSignificantLocationChangesを使用
- GPSがアクティブになることはありません
- 電波塔の変更が検出された場合にのみ、didUpdateLocations(またはios <6の場合はdidUpdateToLocation)を呼び出します。
- 必要なAccuracyプロパティとdistanceFilterプロパティはどちらも無視されます
startUpdatingLocationを使用
- バッテリーの消耗が多い
- didUpdateLocationsは、電話のハードウェアに提供するデータがある場合は常に呼び出されます。また、位置情報(GPS、ラジオ、wifi)に使用できるハードウェアコンポーネントが複数あるため、didUpdateLocationsが呼び出されるタイミングや頻度、または新しい読み取り値が以前の読み取り値よりも正確であるかどうかは保証されません。
- 最初の数字はGPSに依存していないため、通常は不良です。
- 私たちがこれまでに得た最高の場所を持っているかどうかを知る確実な方法はありません。それは、利用可能な特定の時間枠で最高の精度で受け取ったすべての場所の中から選ぶだけの問題です。
ただし、中間ルートに関する議論やドキュメントはあまりありません。パワーを意識したいが、ユーザーが大幅に移動したときに適度に正確なデータを取得したい場合はどうなりますか?考えられる妥協案は次のとおりです。
- startMonitoringSignificantLocationChangesをオンにします
- didUpdateLocationsが呼び出されたときにstartUpdatingLocationを使用するように切り替えます
- しばらく待って、GPSにいくつかの良い測定値を取得する機会を与え、最高の精度で1つを選択します
- startMonitoringSignificantLocationChangesなどの使用に切り替えます...
私の知る限り、このアプローチはフォアグラウンドとバックグラウンドで同じように機能し、Appleがサポートする2つの標準的なアプローチの間である程度の妥協点を提供します。
質問:
-私の理解は正しく、私の「妥協」アプローチは正しいですか?
-誰かがそのアプローチをうまく使用しましたか?
-そのアプローチで探すべき注意点は何ですか?
-そこにもっと良い妥協のアプローチはありますか?
PS:後で、推定移動速度を考慮してアプローチを改良し、人が移動しているときにGPSを常に使用しないようにすることができると思います。