1

アプリがバックグラウンド モードに入るときに、アプリがユーザーの場所を更新しないという問題があります。

UIBackgroundModesのフラン「場所」について多くのことを読んで、アプリのプロパティですでに設定しています。

その後も、私のアプリはロケーション マネージャーをバックグラウンドでドロップし、ユーザーのロケーションの更新を停止します。

何か足りないのですか?

4

4 に答える 4

2

iOS5 では必ず を使用してlocationManager:didUpdateToLocation:fromLocation:ください。これは、アプリがバックグラウンドでも位置情報サービスを要求し続ける方法です。iOS6では、iOS6 で非推奨となっているlocationManager:didUpdateLocations:asを使用する必要があります。locationManager:didUpdateToLocation:fromLocation:

iOS6 では、以下を追加してください。そうしないと、システムが位置情報サービスを使用していないと判断したときに位置情報サービスが無効になります。

if ([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) {
    self.locationManager.pausesLocationUpdatesAutomatically = NO;
}
于 2013-01-31T18:24:32.413 に答える
1

私は同じ問題に遭遇しました。基本的に、CLLocationManager で pausesLocationUpdatesAutomatically フラグを「NO」に設定する必要があります。

于 2013-08-05T04:17:57.837 に答える
1

バックグラウンド モードでアプリを使用することは、iOS では厳しく制限されています。通常、UIBackgroundModes で正しいプロパティが設定されている場合、アプリは場所が更新されるたびに呼び出されます。必要な精度を低く設定することで (例: kCLLocationAccuracyBest)、位置情報のわずかな更新でもアプリが起動します。

ただし、一定時間後にアプリがフォアグラウンドに戻されなかった場合、アプリは完全に強制終了され、位置情報サービスがオフになります (後者は iOS 6 以降のみ)。アプリをバックグラウンドで iOS から継続的に更新することができなかったため、プロジェクトを断念しました。

于 2013-01-31T18:15:26.993 に答える
1

位置の変更がないということは、場所がないこと、イベントがないこと、アクションがないことを意味します。

iPhone が移動し、標準の位置情報モードが設定されているstartUpdatingLocation場合 ( ) 通常、1 秒あたり 1 つの GPS フィックスを取得します。(desiredAccuracy =kCLLocationAccuracyBest またはkCLLocationAccuracyBestForNavigation)

それまでに位置情報サービスが開始された場合、携帯電話基地局startMonitoringSignificantLocationChangesの変更によって決定された位置しか取得できません。

さらに ios6 以降、遅延モードがあり、アプリケーションはバックグラウンドで位置の変更を取得しませんが、後ですべての場所を一度に取得します。(私はそのモードで個人的な経験はありません)。ただし、これもios6以降で考慮されます

CLLocationManagerの説明から

iOS 6 以降では、アプリがバックグラウンドにあるときに位置データの配信を延期できます。アプリが後で問題なくデータを処理できる状況で、この機能を使用することをお勧めします。たとえば、ハイキング トレイルでユーザーの位置を追跡するアプリは、ユーザーが特定の距離をハイキングするまで更新を延期し、ポイントを一度に処理することができます。更新を延期すると、アプリが長時間スリープ状態を維持できるため、電力を節約できます。

于 2013-01-31T18:23:56.187 に答える