2012-12-31 2 views
3

현재 다른 개발자가 시작한 iOS 앱에서 작업하고 있습니다. 앱은 낮은 정밀도 (100 미터)로 사용자 위치를 알아야하기 때문에 위치 변경을 모니터링해야합니다. 위치 정보 항목의 이전 구현은 NSTimerstartUpdatingLocation을 사용하여 수행되었습니다. 실행은 다음과 같이 진행됩니다NSTimer로 startMonitoringSignificantLocationChanges를 사용하여 배터리 사용 개선하기

// Fire each 10 seconds start updating location 
self.timerPosition = [NSTimer scheduledTimerWithTimeInterval:ti 
                 target:self 
                selector:@selector(location) 
                userInfo:nil 
                repeats:YES]; 
[self.timerPosition fire]; 

위치 선택이

// Configure & check location services enabled 
... 
self.locman.delegate = self; 
self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[self.locman startUpdatingLocation]; 

그리고 수행 한 후 위치 관리자 위임

[manager stopUpdatingLocation]; 

그러나 애플 문서에 사용자 위치를 얻기에 관하여 읽기, 그것을에서 저전력 소비로 위치를 파악하는 올바른 방법은 startMonitoringSignificantLocationChanges을 사용하는 것입니다.

제 질문은 startUpdatingLocation 대신 startMonitoringSignificantLocationChanges과 결합하여 위치 타이머를 유지하는 것이 좋습니까? 아니면 말도 안되는 방법입니까?

앱이 백그라운드에있을 때 위치 정보를 가져올 필요는 없지만 앱이 활성화되었을 때 사용자가 위치를 변경 한 시점을 알고 싶습니다.

+1

넌센스 접근법입니다. importantLocationChanges 또는 RegionMonitoring 서비스를 사용해야합니다. 배경 지원이 필요하지 않으면 중요한 위치 변경이 더 나은 접근 방법이라고 생각합니다 – Lefteris

답변

1

저는 저전력 -startMonitoringSignificantLocationChanges를 사용할 때 타이머가 필요하지 않을 수도 있다고 말할 수 있습니다. 이 메서드는 장치가 변경을 감지했을 때 대리자의 콜백에만 응답합니다. 이 위치 확인은 GPS를 사용하지 않고 이미 발생하고있는 Wifi 및 셀 타워 삼각 측량을 사용합니다. 따라서이 방법을 사용하면 배터리 수명을 줄이기 위해 속도를 늦출 필요가 없습니다. 위임 메소드를 설정하고 이에 따라 응답하십시오.

위치를 구현하는 것이 확실하지 않지만 지역 모니터링은 배터리를 거의 사용하지 않고도 위치 업데이트를받을 수있는 또 다른 좋은 방법입니다. 지역 모니터링은 일반 사용자 위치가 아닌 특정 위치를 모니터링 할 때 훨씬 유용합니다. 희망이 물건을 지워.

+0

그래서 WiFi 및 셀 타워가 변경되면 위치를 물을 것입니다. 그렇지 않으면 침묵합니까? –

+0

중요한 변경 사항을 감지하면 업데이트를 수신하는 모든 대리인을 핑 (ping)합니다. 따라서 중요한 변경 사항이 감지 될 때만 대리자에 대한 업데이트가 제공됩니다. –

+0

@BillBurgess gps를 시작하기 위해'StarUpdateLocation' 메소드를 사용하여 사용자 여행과 인스턴트 메신저를 기록하는 애플리케이션을 빌드합니다. 속도가 10km/s 이상이면 여행이 시작되고 오전 8시에 운행이 중단됩니다. 다음날 오전 10시에 추적을 다시 시작해야합니다. startMonitoringSignificantLocationChanges를 사용하는 가장 좋은 방법은 무엇입니까? –

관련 문제