2013-05-31 1 views
1

iOS 앱의 요구 사항 중 하나는 백그라운드에서 위치 변경을 모니터링하는 것입니다. 우리는 "locationManager startMonitoringForRegion : region"을 구현했습니다. 불행히도 우리는 우리의 요구를 충족 시키기에는 너무 정밀하지 않다는 것을 철저히 테스트 할 때 깨달았습니다.iOS 앱이 백그라운드에있을 때 위치를 지속적으로 지속적으로 업데이트 할 수있는 방법은 무엇입니까?

"locationManager startUpdatingLocation"을 사용하여 위치의 정확성을 높였습니다. 포 그라운드에서 모든 것이 잘 작동 했으므로이 위치 정밀도는 우리가 원하는 것입니다.

이제 문제는 앱이 백그라운드에있을 때 이벤트 "didUpdateLocations"가 정기적으로 호출되지 않는다는 것입니다. 우리는 로그 파일을 살펴봄으로써 이것을 관찰했다. 일어나는 일은 거의 동일합니다. 처음 15 분이 지나면 앱이 정기적으로 위치를 업데이트 한 다음 갑자기 갑자기 멈추게됩니다. 약 5 분 휴식 후에 그것은 약 15 분 동안 다시 위치를 업데이트하는 것으로 계속됩니다. 그리고 이것은 같은 방식으로 계속됩니다.

백그라운드 처리의 구현에서 실수를 범했습니다.

UIApplication *app = [UIApplication sharedApplication]; 
UIBackgroundTaskIdentifier bgTask = 0; 

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 

    if(rootViewController._selectedLocation == nil) 
    { 
     NSLog(@"selected location is nil and app entered background"); 
     [rootViewController.locationManager stopUpdatingLocation]; 
    } 
    else 
    { 
     NSLog(@"selected location is not nil and app entered background"); 
     [rootViewController.locationManager startUpdatingLocation]; 
    } 
    [app endBackgroundTask:bgTask]; 

}]; 

약 20 분마다 호출되며 위치가 다시 업데이트됩니다. 우리는 무엇을 잘못하고 있으며 어떤 중단없이 정규 위치 업데이트를받을 수 있습니까? 우리는 iPhone 5로이를 테스트했으며 고정적 인지도 중요합니다.

+0

백그라운드에서 stopUpdatingLocation을 호출합니까? BTW, 나는 당신이 plist에'location' 키를 가지고 있다면'beginBackgroundTaskWithExpirationHandler :'를 사용할 필요가 없다고 생각합니다. – progrmr

+1

또한 [CLLocationManager] (https://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html)의'activityType' 속성에 대해 무엇을 설정 했습니까? 'pausesLocationUpdatesAutomatically'를 NO로 설정 했습니까? – progrmr

+0

많은 감사합니다. 방금 해결했습니다. CllocationManager의 pausesLocationUpdatesAutomatically를 No로 설정했습니다. 이제 앱이 백그라운드에서 정기적으로 위치를 업데이트합니다. 그리고 네, beginBackgroundTaskWithExpirationHandler처럼 보입니다 : 필요 없습니다. 감사합니다! – BCI

답변

0

당신은 응용 프로그램을 plist 파일에 다음 값을 추가해야합니다 :

필요한 배경 모드

배경에 배열 시스템 무엇 응용 프로그램의 필요성을 말하고있다. 항목을 0의 위치를 ​​들어, 값 알려야한다 :

앱이 위치 업데이트를 등록을

의심스러운 경우, 당신은 내가 무슨 말이 링크에서 볼 수 있습니다 iOS Multitasking: Background Location

+0

링크 및 조언에 감사드립니다. "위치 업데이트를위한 앱 등록"값이 "필요한 배경 모드"아래의 plist에 추가되었습니다. 이것은 문제가되지 않는 것처럼 보입니다. 실수는 다른 곳에서 발생합니다. 링크를 면밀히 살펴보고 나를 보냈습니다. – BCI

관련 문제