私のアプリケーションは、バックグラウンドでユーザーの場所の変化を追跡する必要があり、ユーザーが移動している限り正常に動作します。ユーザーがCLLocationManager
10 ~ 20 分程度で停止して一時停止したとき。それはこの通知によって示されます:
-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager{}
そして、これも私には問題ありません。いいですね、バッテリーなどを節約します。
問題は、CLLocationManager
ユーザーが再び移動を開始したときにウェイクアップせず、アプリケーションをフォアグラウンドに配置する(アクティブになる)まで、次のデリゲート メソッドが起動されないことです。
//Never called back after CLLocationManager pauses:
-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager{}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{}
locationManagerDidResumeLocationUpdates
デバイスが再び動き始めた後に呼び出されないのはなぜですか? GPSも自動的に再開すべきではありませんか(自動的に一時停止されたため)?
ユーザーの操作なしで GPS を再開する方法はありますか?
アプリケーションは、Info.plist ファイルで次のように宣言されています。
そして、私の CLLocationManager 設定は次のとおりです。
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setActivityType:CLActivityTypeFitness];
//I WANT pauses to save some battery, etc... That is why following line is commented out (default)
//[locationManager setPausesLocationUpdatesAutomatically:NO];
locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];