1. ホーム
  2. アイオス

[解決済み】iOSアプリケーションでバックグラウンドの位置情報をn分ごとに更新するにはどうすればいいですか?

2022-04-10 22:24:43

質問

iOSアプリケーションで、バックグラウンドでn分ごとに位置情報を更新する方法を探しています。 iOS 4.3を使っていますが、ジェイルブレイクされていないiPhoneでも動作するはずです。

以下のような選択肢を試しました/検討しました。

  • CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges : これは設定されたプロパティに基づいてバックグラウンドで期待通りに動作しますが、n分ごとに位置情報を更新するように強制することはできないようです
  • NSTimer : アプリがフォアグラウンドで実行されているときは動作しますが、バックグラウンドタスクのために設計されていないようです。
  • ローカル通知。ローカル通知はn分ごとにスケジュールできますが、現在地を取得するために何らかのコードを実行することはできません(ユーザーが通知経由でアプリを起動する必要はありません)。 また、このアプローチは、通知が使用されるべきものではないので、クリーンなアプローチとは言えません。
  • UIApplication:beginBackgroundTaskWithExpirationHandler : 私が理解する限り、これは、"long-running"バックグラウンドプロセスを実装するのではなく、アプリがバックグラウンドに移動したときに、バックグラウンドで何らかの作業を終了するために使用されるべきです(これも時間的に制限されています)。

このようなバックグラウンドでの定期的な位置情報の更新は、どのように実装すればよいのでしょうか?

どのように解決するのですか?

Apple Developer Forumsの助けを借りて、これを実装する解決策を見つけました。

  • 指定する location background mode
  • を作成します。 NSTimer を背景にして UIApplication:beginBackgroundTaskWithExpirationHandler:
  • いつ n より小さい よりも UIApplication:backgroundTimeRemaining であれば、問題なく動作します。いつ n より大きい は、その location manager は、バックグラウンドタスクが強制終了されないように、残り時間がなくなる前に再度有効化(および無効化)する必要があります。

ロケーションはバックグラウンド実行の3つのタイプのうちの1つであるため、これは機能します。 .

注:シミュレーターでテストしたところ、うまくいかず時間をロスしてしまいました。しかし、私の携帯電話では正常に動作しています。