2011-03-30 6 views
3

CLLocationManager -startUpdatingLocation을 중지 할 때 조언을 요청하고 싶습니다.CLLocationManager를 중지 하시겠습니까?

[locationManager startUpdatingLocation]; 
[self performSelector:@selector(stopUpdatingLocation:) withObject:@"TimedOut" afterDelay:30]; 
  • 잠재적으로 항상 배터리 수명을 낭비 : 현재 나는 두 가지 방법을 고려하고,하지만 난 사용하고 다른 사람들이 어떻게 아이디어를 얻을하고자하는 확실치 :

    Method_001 30 초 동안 실행됩니다.

  • 네트워크가 느리면 시간이 정확한 위치를 얻지 못할 수도 있습니다.
  • 시간 초과를 구현하는 데는 깔끔한 방법이 있습니다.

Method_002 : 그런 다음 내부

[locationManager startUpdatingLocation]; 

: -locationManager:didUpdateToLocation:fromLocation: 추가 :

static int timeOut = 0; 
timeOut++; 

// Other code that checks for and stops 
// when a suitable result, accuracy, age etc is found. 

if(timeOut >= 4) { 
    [[self locationManager] stopUpdatingLocation]; 
    timeOut = 0; 
    return; 
} 
  • 4 (이하) 시도에 정확한 위치를 해결하지 않을 수 있습니다.
  • CLLocationManager에 대해 4 개의 결과가 반환되지 않을 수 있으며 시간 제한이 적용되지 않을 수 있습니다.
  • 좋은 결과를 얻으면 즉시 배터리 수명이 단축됩니다.

그냥 궁금한가요?

답변

2

를 흠, 나는 내가 첫번째 것을 더 좋아한다고 생각해. didUdpateToLocation: 메서드가 얼마나 자주 호출되는지 확신 할 수 있는지 여부는 알 수 없습니다. 나는 시간이 좀 더 안정적이라고 생각한다.

+0

그게 내가 생각하고 있었는지, 현재 나는 method_002를 사용하고 있지만 때로는 델리게이트에 대한 4 번째 호출이 없다는 것을 알아 차렸다. 이것은 첫 번째 반환이 특히 정확한 경우에 발생하는 것으로 보입니다. 마찬가지로 3을 타임 아웃으로 설정하면 특히 어려운 상황 (잘못된 셀 범위)이 사용 가능한 위치로 정확하게 분석되지 않습니다. – fuzzygoat

3

정확히 무엇을 하려는지는 확실치 않지만 CLLocationManager가 이러한 경우를 내부적으로 처리한다고 생각합니다. 그냥 따라서를 구성 fromLocation : 콜백 didUpdateToLocation에서

locManager.desiredAccuracy = 2000.0f; // 2 kilometers - hope for accuracy within 2 km. 
locManager.distanceFilter = 1000.0f; // one kilometer - move this far to get another update 

다음을 당신이 긍정적 인 signbit이있는 경우,

[locManager stopUpdatingLocation]; // stop GPS 

편집 : 추가 signbit

if (signbit(newLocation.horizontalAccuracy)) { 
     // Negative accuracy means an invalid or unavailable measurement, so punt. 
} else { 
     // this is a usable measurement. 
    } 
+0

는 CLLocationManager가 '사용 안 함'선택기에 응답합니까? – atreat

+0

@atreat - 좋은 catch - 내 코드에서 사용자 정의 래퍼 메소드였습니다. 올바른 메소드 호출을 사용하도록 업데이트했습니다. – Rayfleck

+0

"긍정적 인 표지판이 있다면"무엇을 의미합니까? –

1

두 가지 접근 방식을 결합하여 제 3을 제공하지 않는 이유는 무료 나는이에 GIT의 REPO를 썼다

, (내가 가장 좋은 결과가 일정 시간에 개선되지 않았다)를 사용하는 https://github.com/xelvenone/M6GPSLocationManager

이런 일이되지 않을 경우, 우리가 수행하고 수행하는 - 결과의 정확성이 acceptableAccuracy보다 더 나은 경우 우리가 occuracy에 대한 업데이 트를 얻을 경우
  • 는, 우리는
  • 완료, 우리는 maximumWaitTimeForBetterResult가 하나 더 나은 얻을 기다릴 가장 좋은 것
  • maximumAttempts를 초과하는 업데이트를 지속적으로 받고 있다면 우리는 최선을 다합니다 (아마도 우리는 어쨌든 움직일 것입니다).
  • 30 초 내에 다른 업데이트를 얻지 못하면 완료됩니다. 아마 다른 업데이트)

코드

- (void)scopeToCurrentLocationWithAcceptableAccuracy:(CLLocationAccuracy)acceptableAccuracy 
        maximumWaitTimeForBetterResult:(NSTimeInterval)maximumWaitTimeForBetterResult 
           maximumAttempts:(NSInteger)maximumAttempts 
            onCompletion:(M6GPSLocationManagerCompletion)completion; 
관련 문제