5

次の方法でユーザーの位置を追跡する必要があるアプリを実装しています。

  • アプリがバックグラウンドまたは閉じている間にユーザーの位置を追跡する
  • ユーザーの位置が約 2000 メートル変更された場合、API 呼び出しを実行する必要があります。

この問題に対する私のアプローチは次のとおりです。

  • ユーザーがアプリを初めて起動すると、現在の場所を使用して地域の監視を開始します
  • didExitRegionがトリガーされた場合は、API 呼び出しを実行し、現在の場所を新しいリージョンの中心として使用して、現在監視されているリージョンを新しいリージョンに置き換えます。

これは、ロケーション マネージャーから返される位置が正確であるため、アプリがフォアグラウンドにある場合に正常に機能します。

ただし、アプリがバックグラウンドにある場合、ロケーション マネージャーは初めて実行され、返される最初の座標が正確ではないため、正確な場所を返しません。

問題は、 didExitRegionがバックグラウンドでトリガーされたときにユーザーの正確な位置を取得するにはどうすればよいかということです。

ありがとう

4

2 に答える 2

3

didExitRegion:確実に発砲できる運はあまりありませんでした。多くの場合、私の地域の端よりもはるかに遠くに発砲します。

2km ごとに API 呼び出しが必要な場合は、を使用することをCLLocationManagerお勧めします。-startMonitoringSignificantLocationChanges精度/精度が重要な場合は、位置情報サービスを必要なバックグラウンド状態として登録するだけです (アプリの plist で、バックグラウンドから大幅な変更 API を使用するためにもこれを行う必要がある場合がありUIBackgroundModesます)。インスタンスのフィールド値。-startUpdatingLocationdistanceFilterdesiredAccuracyCLLocationManager

于 2012-11-03T23:59:20.160 に答える
0

ここでいくつかのことが起こっています。

リージョン変更のトリガーは少し可変であるとおっしゃいました。これは意図的なものです。2 つの領域の間の境界を下っていくときに多数のトリガーが発生するのを避けるために、時間と位置の両方で、トリガーにある程度の粘着性があります。

ドキュメントから ( http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1 )

The system does not report boundary crossings until the boundary plus a designated cushion distance is exceeded. You specify the desired cushion distance for a region when you register it using the startMonitoringForRegion:desiredAccuracy: method. This cushion value prevents the system from generating numerous entered and exited events in quick succession while the user is traveling close the edge of the boundary.

正確な位置を取得することは通常と変わりません。位置マネージャーを起動し、目的の精度で位置情報が更新されるまで待ちます。マネージャーをシャットダウンして、その位置を使用してください。

バックグラウンドで実行しているため、これを行うのに 10 分しかありません。UIApplication の startBackgroundTaskWithExceptionHandler を使用して、バックグラウンド処理を行っていることを OS に通知する必要があります。他の場所でそれに関する多くのドキュメント。

それが役立つことを願っています。

于 2013-07-31T11:08:41.933 に答える