첫째, 매 순간 startUpdatingLocation를 호출하지 마십시오. 기기에서 배터리 수명을 단축 할 수 있습니다. 위치 서비스는 작동에 많은 양의 배터리 전원을 사용합니다. 또한 startUpdatingLocation
에 전화하면 stopUpdatingLocation
에 전화 할 때까지 계속 실행됩니다.
CLLocationManager
에 설정할 수있는 속성이있어 필요에 맞게 구성 할 수 있습니다. 추천 ...
@property(assign, nonatomic) CLLocationDistance distanceFilter
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy
distanceFilter
설명 : 갱신 이벤트가 발생하기 전에 장치를 수평 이동한다 (미터로 측정)가 최소 거리.
desiredAccuracy
하면 다음 중 하나가 될 수 있습니다
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest;
kCLLocationAccuracyNearestTenMeters;
kCLLocationAccuracyHundredMeters;
kCLLocationAccuracyKilometer;
kCLLocationAccuracyThreeKilometers;
당신의 CLLocationManager
개체의 구성에 따라, 장치가 다른 사람에 비해 특정 지리적 위치 하드웨어를 사용합니다. 때로는 셀 타워 삼각 측량을 사용하는 것만으로도 충분할 수 있으며 준결승 정확한 위치를 얻는 가장 빠른 방법입니다. 다른 경우 GPS를 사용해야 할 수도 있습니다. GPS를 사용하면 배터리 수명이 매우 빨리 소모되고 장소를 확보하는 데 훨씬 오래 걸리지 만 대부분의 경우 훨씬 정확합니다.
나는 NSTimer를 시작하는 것이 좋지만 계획했던 것과는 정반대로 활용하는 것이 좋습니다. CLLocationManager
이 충분히 정확한 위치를 얻을 수없는 경우 합리적인 시간이 지나면 stopUpdatingLocation
으로 활용하십시오. 위치 서비스를 영원히 계속해서 실행하고 싶지는 않습니다. 이 타이머를 30 초와 같이 설정하면 제한 시간 후에 종료됩니다.
또한, 당신은 CLLocationManagerDelegate 메소드를 구현해야합니다
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
을 당신이 최근 확인하기 위해 위치의 timestamp
을 확인해야합니다이 방법. 원하는 정확도 범위 내에 있는지 확인하려면 위치의 horizontalAccuracy
도 확인해야합니다. 다음은이를 수행하는 방법의 예입니다.
: 단순히 때문에 같은 위치의 배열의 마지막 개체를 가져
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
가 새로운 위치를 얻으려면 : 위의 방법이 사용되지 않습니다 아이폰 OS 6에서
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// Ensure we get a recent and accurate location
NSDate * locationTimestamp = [newLocation timestamp];
NSTimeInterval timeDifference = [locationTimestamp timeIntervalSinceNow];
double thirtyMins = (30 * 60 * -1);
BOOL locationTimestampIsCurrent = (timeDifference > thirtyMins);
BOOL isAccurateLocation = (newLocation.horizontalAccuracy <= 3000.00);
if (locationTimestampIsCurrent && isAccurateLocation) {
NSLog(@"Shutting down location services, we have a good locaton.");
[self stopListeningForLocation];
} else {
// Do nothing, let this method be called again with a new "newLocation" to check its validity.
}
}
대신 다음과 같은 위임 방법을 사용
CLLocation *location = [locations lastObject];
[배경에서 위치 이벤트 가져 오기] (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009)를 참조하십시오. 497-CH2-SW10). 백그라운드에서'startUpdatingLocation'을 호출 할 필요는 없습니다. 하지만 위치 서비스를 계속 유지할 수있는 권한을 요청해야합니다. [location discussion here] (http://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW24)를 참조하십시오. – Rob
http://stackoverflow.com/questions/6347503/how-do-i-get-a-background-location-update-every-n-minutes-in-my-ios-application –