3

iOS では、CLLocationManager'sstartMonitoringForRegion:メソッドを使用してデリゲートを登録し、アプリが起動されていない場合でも、特定の地理的領域に移動するデバイスに応答できると言われています。CLLocationManagerクラスリファレンスから:

iOS では、ロケーション マネージャーに登録したリージョンは、アプリケーションの起動間で維持されます。iOS アプリが実行されていないときにリージョン クロッシングが発生した場合、システムはイベントを処理できるように、バックグラウンドでアプリを自動的にウェイクアップ (または再起動) します。再起動すると、以前に構成したすべてのリージョンが、作成したロケーション マネージャー オブジェクトの monitoringRegions プロパティで使用できるようになります。

アプリが再起動された場合、iOS は実際にはフォアグラウンドに移動しないと思います。startMonitoringForRegionアプリケーション全体のどこに適合するかを示す良いサンプルが見つからなかったので、私の質問は次のとおりです。

  1. startMonitoringForRegion特定の場所からデリゲートを登録する必要がありますか? アプリをフォアグラウンドに移動せずに起動している場合、ビューコントローラーでそれをポンピングすることはできないと思います。誰かがその周りの文脈で例を挙げることができますか?
  2. リージョンに入った結果としてアプリをフォアグラウンドに移動したいと判断した場合、どうすればよいでしょうか?
  3. はいつstartMonitoringForRegionOS に登録され、いつ登録解除されますか? 初期登録が行われるために、ユーザーはアプリを少なくとも 1 回起動する必要がありますか? ユーザーがデバイスの電源をオフにするとどうなりますか? 次にデバイスの電源を入れたときにハンドラーが登録されるか、それともユーザーがアプリを少なくとももう一度起動する必要があるか?
4

1 に答える 1

1

特定の場所から startMonitoringForRegion のデリゲートを登録する必要がありますか? アプリをフォアグラウンドに移動せずに起動している場合、ビューコントローラーでそれをポンピングすることはできないと思います。

間違い。コンテンツが表示されていなくても、 View Controller オブジェクトが割り当て初期化されている場合は、まだ存在します

領域に入った結果としてアプリをフォアグラウンドに移動したいと判断した場合、どのように行うのでしょうか?

パブリック API を使用することはできません (バックグラウンドのアプリが- [UIApplication openURL:]独自の URL スキームを使用してバックグラウンドに移行できるかどうかはわかりませんが、疑わしいです)。ただし、SpringBoardServices フレームワークを使用してアプリを起動できる場合があります。

SBSLaunchApplicationWithIdentifier(CFSTR("com.mycompany.theBestiPhoneAppEver"), false);

startMonitoringForRegion はいつ OS に登録され、いつ登録解除されますか? 最初の登録が行われるために、ユーザーはアプリを少なくとも 1 回起動する必要がありますか (それ以降に強制終了された場合でも)?

ユーザーがアプリケーションを実行しない場合、内部のコードは実行されないため、登録されません。

ユーザーがデバイスの電源をオフにするとどうなりますか? 次にデバイスの電源を入れたときにハンドラーが登録されるか、それともユーザーがアプリを少なくとももう一度起動する必要があるか?

これは良い質問です。私は頭の中でそれを知りませんし、ドキュメントで答えも見つけられませんでした (おそらくあなたもそれを見つけていないでしょう)。

于 2012-10-09T14:35:35.283 に答える