높은 정확도와 낮은 빈도로 백그라운드 위치 업데이트가 필요한 응용 프로그램을 작성 중 입니다. 솔루션은 위치 관리자의 업데이트를 시작하고 즉시 종료되는 백그라운드 NSTimer 작업 인 것 같습니다. 이 질문은 이전에 요청되었습니다.
iOS 애플리케이션에서 n 분마다 백그라운드 위치 업데이트를 받으려면 어떻게해야합니까?
앱이 백그라운드로 전환 된 후 n 분마다 사용자 위치 가져 오기
iOS는 일반적인 백그라운드 위치 추적 타이머 문제가 아닙니다.
"위치"백그라운드 모드가있는 iOS 장기 실행 백그라운드 타이머
위치 추적을 기반으로 한 iOS 풀 타임 백그라운드 서비스
그러나 나는 아직 최소한의 예제 를 얻지 못했습니다 . 위에서 받아 들여진 답변의 모든 순열을 시도한 후 시작점을 모았습니다. 배경 입력 :
- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"ending background task");
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
self.timer = [NSTimer scheduledTimerWithTimeInterval:60
target:self.locationManager
selector:@selector(startUpdatingLocation)
userInfo:nil
repeats:YES];
}
및 대리자 메서드 :
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
현재 동작은 backgroundTimeRemaining
180 초에서 0 (위치 로깅 중)으로 감소한 다음 만료 처리기가 실행되고 추가 위치 업데이트가 생성되지 않는 것입니다. 백그라운드에서주기적인 위치 업데이트를 무기한 수신하려면 위 코드를 어떻게 수정 합니까?
업데이트 : iOS 7을 대상으로하고 있으며 백그라운드 작업이 다르게 작동한다는 몇 가지 증거가있는 것 같습니다.