質問: お世話になります。 位置情報を利用したアプリを作っているのですが、思うように位置情報の切り替えが出来ません。 具体的にはアプリ終了時(バックグラウンドでも生きていない)時の位置情報の取得です。 簡単なアプリの流れです。 ・ボタンを押す(off>on)と位置情報の取得開始CLLocationManagerのstartUpdatingLocationで取得開始。 ・バックグラウンド、アプリ終了時はstopUpdatingLocationをしstartMonitoringSignificantLocationChangesをして基地局ベースに切り替え。 実際にこの処理を行っているのはapplicationDidEnterBackground:です。(Notificationで呼び出し) ・フォアグラウンドに来た時はMonitoringSignificantLocationChangesをし、startUpDatingLocationに切り替え。 実際にこの処理を行っているのはapplicationWillEnterForeground:です。(Notificationでメソッド呼び出し) ・ボタンを押す(on->off)したらstopUpdatingLocationでGPSの取得終了。 SignificantLocationChangesだけを使用したサンプルでは成功したのですが、既存のアプリに組み込んだ場合、バックグラウンドでは取得に成功しているのですが、アプリを終了させたら取得できません。ステータスバーのGPSマークはon表示されているままです。 色々と試したりしたのですがどうも改善されず、またネットで探してみたりもしたのですが、わかりませんでした。 なにが原因かわかる方、意見などありましたらご教授ください。
回答: `startMonitoringSignificantLocationChanges`のドキュメントに書かれているように、一度アプリが終了された後に位置が変わったことが検出された場合、`application:willFinishLaunchingWithOptions:`に情報が渡されますので、その中で再度`CLLocationManager`を初期化して、`startMonitoringSignificantLocationChanges`を呼び出す必要があります。 > > If you start this service and your app is subsequently terminated, the system automatically relaunches the app into the background if a new event arrives. In such a case, the options dictionary passed to the application:willFinishLaunchingWithOptions: and application:didFinishLaunchingWithOptions: methods of your app delegate contains the key UIApplicationLaunchOptionsLocationKey to indicate that your app was launched because of a location event. Upon relaunch, you must still configure a location manager object and call this method to continue receiving location events. When you restart location services, the current event is delivered to your delegate immediately. In addition, the location property of your location manager object is populated with the most recent location object even before you start location services. > > > この部分の処理はされていますか?