重要な変更の位置情報サービスに関して問題があります。
Appleのドキュメントには、「標準の位置情報サービスを使用する場合でも、大幅に変更された位置情報サービスを使用して位置情報イベントを取得する場合でも、それらのイベントを受信する方法は同じです」と記載されています。
しかし、「重要な位置情報サービス」の場合、「標準の位置情報サービス」の場合に得られるコールバックを受け取ることができません。誰か入力があれば教えてください。
重要な変更の位置情報サービスに関して問題があります。
Appleのドキュメントには、「標準の位置情報サービスを使用する場合でも、大幅に変更された位置情報サービスを使用して位置情報イベントを取得する場合でも、それらのイベントを受信する方法は同じです」と記載されています。
しかし、「重要な位置情報サービス」の場合、「標準の位置情報サービス」の場合に得られるコールバックを受け取ることができません。誰か入力があれば教えてください。
startUpdatingLocation
最初に呼び出されたときに位置を更新し、次に距離フィルター値を超えたときに位置を更新します。
しかし、startMonitoringSignificantLocationChanges
ポジションの大幅な変更が発生したとき。
詳細については、 CLLocationManagerを確認してください。
startUpdatingLocation
ユーザーの現在の場所を報告する更新の生成を開始します。
- (void)startUpdatingLocation Discussion
このメソッドはすぐに戻ります。このメソッドを呼び出すと、ロケーション マネージャーは最初の位置修正を取得し (数秒かかる場合があります)、locationManager:didUpdateLocations: メソッドを呼び出してデリゲートに通知します。(iOS 5 以前では、ロケーション マネージャーは代わりに locationManager:didUpdateToLocation:fromLocation: メソッドを呼び出します。) その後、レシーバーは主に distanceFilter プロパティの値を超えたときに更新イベントを生成します。ただし、更新は他の状況で配信される場合があります。たとえば、ハードウェアがより正確な位置の読み取り値を収集した場合、受信者は別の通知を送信できます。
このメソッドを連続して数回呼び出しても、新しいイベントが自動的に生成されるわけではありません。ただし、途中で stopUpdatingLocation を呼び出すと、次にこのメソッドを呼び出したときに新しい初期イベントが送信されます。
このサービスを開始し、アプリケーションが中断された場合、システムは、アプリケーションが再び (フォアグラウンドまたはバックグラウンドで) 実行を開始するまで、イベントの配信を停止します。アプリケーションが終了すると、新しい場所のイベントの配信は完全に停止します。したがって、アプリケーションがバックグラウンドで位置イベントを受信する必要がある場合は、Info.plist ファイルに UIBackgroundModes キー (位置の値を含む) を含める必要があります。
locationManager:didUpdateLocations: メソッドを実装するデリゲート オブジェクトに加えて、潜在的なエラーに対応するために locationManager:didFailWithError: メソッドも実装する必要があります。
startMonitoringSignificantLocationChanges
場所の大幅な変更に基づいて、更新の生成を開始します。
- (void)startMonitoringSignificantLocationChanges Discussion
このメソッドは、ロケーション イベントの配信を非同期で開始し、呼び出した直後に戻ります。ロケーション イベントは、デリゲートの locationManager:didUpdateLocations: メソッドに配信されます。配信される最初のイベントは、通常、最後にキャッシュされたロケーション イベント (存在する場合) ですが、状況によってはより新しいイベントになる場合があります。現在の場所の修正を取得するにはさらに数秒かかる場合があるため、デリゲート メソッドの場所イベントのタイムスタンプを必ず確認してください。
現在の場所の修正を返した後、受信者は、ユーザーの場所の大幅な変更が検出された場合にのみ更新イベントを生成します。たとえば、デバイスが別の基地局に関連付けられると、新しいイベントが生成される場合があります。イベントを生成するために、distanceFilter プロパティの値に依存しません。このメソッドを連続して数回呼び出しても、新しいイベントが自動的に生成されるわけではありません。ただし、その間に stopMonitoringSignificantLocationChanges を呼び出すと、次にこのメソッドを呼び出したときに新しい初期イベントが送信されます。
このサービスを開始した後でアプリケーションが終了した場合、新しいイベントが到着すると、システムは自動的にアプリケーションをバックグラウンドで再起動します。このような場合、アプリケーション デリゲートの locationManager:didUpdateLocations: メソッドに渡されるオプション ディクショナリには、ロケーション イベントのためにアプリケーションが起動されたことを示すキー UIApplicationLaunchOptionsLocationKey が含まれます。再起動時に、引き続きロケーション マネージャー オブジェクトを構成し、このメソッドを呼び出してロケーション イベントを受信し続ける必要があります。位置情報サービスを再起動すると、現在のイベントがデリゲートにすぐに配信されます。さらに、ロケーション サービスを開始する前であっても、ロケーション マネージャー オブジェクトのロケーション プロパティには最新のロケーション オブジェクトが取り込まれます。
locationManager:didUpdateLocations: メソッドを実装するデリゲート オブジェクトに加えて、潜在的なエラーに対応するために locationManager:didFailWithError: メソッドも実装する必要があります。
注: アプリは、デバイスが前回の通知から 500 メートル以上移動するとすぐに通知を受け取ることができます。5 分に 1 回以上の頻度で通知を期待するべきではありません。デバイスがネットワークからデータを取得できる場合、ロケーション マネージャーはタイムリーに通知を配信する可能性が高くなります。