アプリがバックグラウンド モードに入るときに、アプリがユーザーの場所を更新しないという問題があります。
UIBackgroundModesのフラン「場所」について多くのことを読んで、アプリのプロパティですでに設定しています。
その後も、私のアプリはロケーション マネージャーをバックグラウンドでドロップし、ユーザーのロケーションの更新を停止します。
何か足りないのですか?
アプリがバックグラウンド モードに入るときに、アプリがユーザーの場所を更新しないという問題があります。
UIBackgroundModesのフラン「場所」について多くのことを読んで、アプリのプロパティですでに設定しています。
その後も、私のアプリはロケーション マネージャーをバックグラウンドでドロップし、ユーザーのロケーションの更新を停止します。
何か足りないのですか?
iOS5 では必ず を使用してlocationManager:didUpdateToLocation:fromLocation:
ください。これは、アプリがバックグラウンドでも位置情報サービスを要求し続ける方法です。iOS6では、iOS6 で非推奨となっているlocationManager:didUpdateLocations:
asを使用する必要があります。locationManager:didUpdateToLocation:fromLocation:
iOS6 では、以下を追加してください。そうしないと、システムが位置情報サービスを使用していないと判断したときに位置情報サービスが無効になります。
if ([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
self.locationManager.pausesLocationUpdatesAutomatically = NO;
}
私は同じ問題に遭遇しました。基本的に、CLLocationManager で pausesLocationUpdatesAutomatically フラグを「NO」に設定する必要があります。
バックグラウンド モードでアプリを使用することは、iOS では厳しく制限されています。通常、UIBackgroundModes で正しいプロパティが設定されている場合、アプリは場所が更新されるたびに呼び出されます。必要な精度を低く設定することで (例: kCLLocationAccuracyBest
)、位置情報のわずかな更新でもアプリが起動します。
ただし、一定時間後にアプリがフォアグラウンドに戻されなかった場合、アプリは完全に強制終了され、位置情報サービスがオフになります (後者は iOS 6 以降のみ)。アプリをバックグラウンドで iOS から継続的に更新することができなかったため、プロジェクトを断念しました。
位置の変更がないということは、場所がないこと、イベントがないこと、アクションがないことを意味します。
iPhone が移動し、標準の位置情報モードが設定されているstartUpdatingLocation
場合 ( ) 通常、1 秒あたり 1 つの GPS フィックスを取得します。(desiredAccuracy =kCLLocationAccuracyBest
またはkCLLocationAccuracyBestForNavigation
)
それまでに位置情報サービスが開始された場合、携帯電話基地局startMonitoringSignificantLocationChanges
の変更によって決定された位置しか取得できません。
さらに ios6 以降、遅延モードがあり、アプリケーションはバックグラウンドで位置の変更を取得しませんが、後ですべての場所を一度に取得します。(私はそのモードで個人的な経験はありません)。ただし、これもios6以降で考慮されます
CLLocationManagerの説明から
iOS 6 以降では、アプリがバックグラウンドにあるときに位置データの配信を延期できます。アプリが後で問題なくデータを処理できる状況で、この機能を使用することをお勧めします。たとえば、ハイキング トレイルでユーザーの位置を追跡するアプリは、ユーザーが特定の距離をハイキングするまで更新を延期し、ポイントを一度に処理することができます。更新を延期すると、アプリが長時間スリープ状態を維持できるため、電力を節約できます。