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로이를 테스트했으며 고정적 인지도 중요합니다.
백그라운드에서 stopUpdatingLocation을 호출합니까? BTW, 나는 당신이 plist에'location' 키를 가지고 있다면'beginBackgroundTaskWithExpirationHandler :'를 사용할 필요가 없다고 생각합니다. – progrmr
또한 [CLLocationManager] (https://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html)의'activityType' 속성에 대해 무엇을 설정 했습니까? 'pausesLocationUpdatesAutomatically'를 NO로 설정 했습니까? – progrmr
많은 감사합니다. 방금 해결했습니다. CllocationManager의 pausesLocationUpdatesAutomatically를 No로 설정했습니다. 이제 앱이 백그라운드에서 정기적으로 위치를 업데이트합니다. 그리고 네, beginBackgroundTaskWithExpirationHandler처럼 보입니다 : 필요 없습니다. 감사합니다! – BCI