24

バックグラウンドで人の位置を確認し、特定の場所にいるかどうかを確認し、サーバーにpingを送信できるアプリをセットアップしようとしています。ユーザーのエネルギーを消耗させたくないので、最善の解決策を見つけようとしています。

私はかなりの読書をしましたが、これらの方法に関する情報はあまり見つかりませんでした。私は今それらを理解しているので、長所と短所を見ていきます

startMonitoringForSignificantChanges

説明: Wi-Fi と携帯電話基地局の変更に基づいて、システムがアプリを起動します。

ドキュメント:

アプリは、デバイスが前回の通知から 500 メートル以上移動するとすぐに通知を期待できます。5 分に 1 回以上の頻度で通知を期待するべきではありません。デバイスがネットワークからデータを取得できる場合、ロケーション マネージャーはタイムリーに通知を配信する可能性が高くなります。

長所:

  • 最もバッテリー効率が良い

短所:

  • Wi-Fi/セルタワーの変更に依存
  • これは 200m から 2km ごとに呼び出されると想定することしかできません (特定の地域ではそれ以上ではない場合)。
  • 精度の詳細
  • したがって、一貫性がなく、不正確です

10 分起動更新または「n 分更新」:

説明: これは基本的に、アプリに追加の時間を要求します。その延長時間が切れそうになると、アプリは [self.locationManager startUpdating] を呼び出し、場所を取得して、バックグラウンド スレッドをさらに 10 分間延長します。

長所:

  • 一貫性のある
  • 必要なだけ正確にすることができます 必要なだけ一貫性を保つことができます

短所:

  • アプリをバックグラウンドで実行し続けるために、10 分以下ごとに呼び出しを行う必要があります (つまり、呼び出しの n を 10 より大きくすることはできません)。

質問: これはバッテリーにどのような影響を与えますか? GPS をウェイクアップしてオフにすると、バッテリーにさらにダメージを与えますか? バックグラウンドで簡単な位置チェックを実行すると、バッテリーがそれほど消耗するとは想像もできませんでした... しかし、やはり、GPS の電源を入れて使用可能な信号を取得する方法がわかりません。

startMonitoringForRegion (ジオフェンシング):

簡単に言えば、事前定義された領域に入るとアプリが起動します。これはそれらの奇妙なものであり、より最近のものであり、ドキュメントが少なくなっています。「システムが境界通過を監視する」方法についての適切な説明が見つかりません。私が知っているのは、それが本当にスマートなアルゴリズムであるか、GPS に常に ping を送信しているため、これを行うための他の方法よりも効果的ではありません.

長所:

  • 簡単な実装
  • システムによって管理されるため、独自のアドホック ジオフェンスを発明する必要はありません 境界を越えたときにのみトリガーされます...バッテリー ヒットと引き換えに不要なデータを捨てる必要はありません
  • したがって、この種のものに最適で、正確で、システムによって管理されている必要があります

短所:

  • 人々はその有効性に疑問を抱いています
  • それがバッテリーの寿命に良いかどうか、またはバッテリーの寿命をひどく消耗するかどうかについて、大きな対立があります。
  • システムはこれをどのように監視していますか!?
  • 基本的に、不確定な動作。

私の質問は、バッテリーの寿命、一貫性、および精度に関して、バックグラウンドでユーザーの位置をテストするこれらの他の方法と比較して、startMonitoringForRegion がどのように機能するかということに要約されると思います。誰かがこれを徹底的にテストしましたか? または、アプリで使用して、少なくともいくつかのフィードバックを得ましたか? おそらく、私の目的では、トレードオフはジオフェンシングと 10 分間の更新方法の間です。(また、Apple が iOS7 について公に述べていることを考えると、いくつかのバックグラウンド タスクが存在することになります...これにより、これら 2 つの方法のトレードオフの計算が変わるでしょうか?) これら 2 つの方法を比較する方法を知っている人はいますか?

本当にありがとう!これらの方法を比較する方法の根底に到達できるかどうかを楽しみにしています.

4

1 に答える 1

16

私は 2 年間、GPS を使用した車両追跡に取り組んできました。多くの困難な方法を学びました... 私の経験では、startMonitoringForRegion または Geo-fencing はセル変更イベントに依存し、didEnter または didExit イベントは、セル/wifi 変更イベントが発生するまで起動しません。したがって、バッテリーの消費に関しては何の違いもありません。ただし、現在監視されている領域の数に応じて、追加の計算が行われます。Apple のリマインダー アプリでさえ、ジオフェンシングを使用しているため、位置情報ベースのリマインダーでは良い結果が得られません。

m 分ごとに n 分間 GPS を開始するもう 1 つの方法は、適切なオプションです。賢明に行えば、バッテリーの寿命に影響を与えることはありません。バッテリーに正確に影響を与えるのは、高精度モードでの継続的な GPS のアクティブ化です。たとえば、kCLLocationAccuracyBest と distance-filter = 0 で GPS を有効にすると、文字通りバッテリーの消耗を観察でき、すぐにデバイスも熱くなり始めます。

私があなただったら、kCLLocationAccuracyBest (または、精度がそれほど重要でない場合は、kCLLocationAccuracyNearestTenMeters を使用してバッテリーの使用量を減らすことができます) と距離フィルター = 5 (メートル) を使用して、10 分ごとに 5 秒間 GPS を有効にします。この場合のバッテリー消費は目立たなくなります。特定のケースに対処できる同様の設定を試してみて、最終的に何が最適かを見つけることができます.

ところで: iPhone は AGPS を使用し、A-GPS はさらにネットワーク リソースを使用して、信号状態が悪いときに衛星を見つけて使用します。そのため、startUpdatingLocation を実行すると、近くの携帯電話基地局の情報も使用されます。http://en.wikipedia.org/wiki/Assisted_GPSを参照

于 2013-08-26T14:36:38.503 に答える