2014-09-22 3 views
5

응용 프로그램이 백그라운드 상태이거나 전경 상태 인 경우 5 분마다 사용자 위치를 이상적으로 업데이트하고 싶습니다. 이것은 매우 위치 민감한 응용 프로그램입니다, 그래서 항상 중요한 위치를 아는 것이 중요합니다.iOS 8의 타이머/주기적으로 백그라운드에서 위치 업데이트

이 질문과 관련하여 많은 답변이 있지만, 많은 사람들이 iOS 6 이전 버전을 다루고 있습니다. iOS 7 이후 백그라운드 작업이 많이 바뀌었고 백그라운드에서 정기적 인 위치 업데이트를 구현하는 방법을 찾기가 어려워졌습니다.

답변

2

CoreLocation의 위임자를 사용하려고합니다. 좌표를 얻 자마자 CoreLocation을 중지하고 타이머를 설정하여 5 분 안에 다시 시작하십시오.

iOS 8에서는 NSLocationWhenInUseUsageDescription 및/또는 NSLocationAlwaysInUseDescription에 대한 plist 항목을 설정해야합니다.

Apple 설명서에는이 작업을 수행하는 방법이 매우 명확하게 나와 있습니다.

-(void)startUpdating{ 
    self.locationManager = [[CLLocationManager alloc]init]; 
    self.locationManager.delegate = self; 
    [self.locationManager requestWhenInUseAuthorization]; 
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
    [self.locationManager startUpdatingLocation]; 

} 

-(void)timerFired{ 
    [self.timer invalidate]; 
    _timer = nil; 
    [self.locationManager startUpdatingLocation]; 
} 

// CLLocationDelegate 
- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations{ 
    if(locations.count){ 
     // Optional: check error for desired accuracy 
     self.location = locations[0]; 
     [self.locationManager stopUpdatingLocation]; 
     self.timer = [NSTimer scheduledTimerWithTimeInterval:60 * 5 target:self selector:@selector(timerFired) userInfo:nil repeats:NO]; 
    } 
} 
+0

앱이 백그라운드로 들어갔을 때 계속 작동합니까? – initWithQuestion

+0

일부 모드는 yes입니다. 설명서를 읽으십시오. – VaporwareWolf

+0

timerFired 메소드가''[self.locationManager startUpdatingLocation]''일 때''[self.locationManager stopUpdatingLocation]''이 두 번 등장한다는 것을 알았습니까? 필자는 마지막 객체가 항상 가장 최근이기 때문에''self.location = [locations lastObject]''가 더 적합하다고 생각합니다. 마지막으로 타이머 무효화 논리가 호출되는 이유를 설명 할 수 있습니까? – initWithQuestion

0

apple documentation에는 이와 관련하여 많은 정보가 있습니다.

또한 몇 가지 추가 답변이 herehere이며 이전 답변과 함께 stackoverflow가 있습니다. 거기에 당신을 도울 수 있어야 충분한 정보가있을 것 같습니다!

+0

이러한 답변은 모두 iOS 8 이전이며 해당 메소드 중 일부는 이미 사용되지 않습니다. – initWithQuestion

+1

그들은 올바른 방향으로 인도하도록 돕기위한 것입니다. 질문이있을 때 필요한 모든 정보를 제공 할 수 있도록 문서가 있어야합니다. 백그라운드에서 실행중인 앱에 대한 Apple의 설명서에는 많은 정보가 있습니다. – sdoowhsoj

관련 문제