2012-12-16 3 views
3

우리 앱에서는 CoreLocation을 사용하여 사용자 위치를 얻고 있습니다. startUpdatingLocation에 대한 호출이 매번 locationManager : didUpdateLocations를 호출한다고 생각했습니다. 하지만 처음으로 전화를 받으면 더 이상 전화를받지 않습니다.didUpdateToLocation이 두 번째로 호출되지 않았습니다.

- (void) startStandardUpdates { 
if (_locationManager == nil) { 
    _locationManager = [[CLLocationManager alloc] init]; 
    [_locationManager setDelegate:self]; 
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    _locationManager.distanceFilter = 10; 
    [_locationManager startUpdatingLocation]; 

} else { 
    NSLog(@"[LOCATION]: Location Manager already exists."); 
    [_locationManager startUpdatingLocation]; 
} 
} 

그런 다음 NSTimer하여 전화 :

- (void) startTask { 
    NSLog(@"Start task called."); 
    [NSTimer scheduledTimerWithTimeInterval:15 
            target:self 
           selector:@selector(actualTask) 
           userInfo:nil 
            repeats:YES]; 
} 

- (void) actualTask { 
    NSLog(@"[TASK]: Starting location service..."); 
    [self startStandardUpdates]; 
} 

위의 코드는 startUpdatingLocation에게 15 초마다 호출해야하지만 didUpdateToLocation 방법은 두 번째라고하기 나의 AppDelegate.m에서

(처음으로 성공적으로 호출 된 ...).

didUpdateToLocation을 프로그래밍 방식으로 호출 (또는 강제 적용) 할 수있는 방법이 있습니까? 아니면 didUpdateToLocation이 위치를 얻을 때까지 기다려야합니까? 나는 매 x 분/초마다 사용자의 위치를 ​​얻는 방법을 모색했지만 아무도 성공하지 못했다. 내가 뭘하고 싶은지 안드로이드가 서비스 클래스 (iOS는 이것을 가지고 있지 않다)로 어떻게하는지에 상응한다.

도움을 주시면 감사하겠습니다.
감사합니다.

+0

-distancefilter=10을 변경? 나는 지금 같은 문제가있다. 그러나 그것의 단지 다섯 번 업데이트. 그 후 그것 자체는 멈추고있다. 시뮬레이터에서 잘 작동합니다. 이걸 도와주세요. – sathiamoorthy

+0

안녕하세요. 불행히도, 여전히 내 문제에 대한 "솔리드"솔루션이 없습니다. 그것이 도움이 될지 모르겠지만, 귀하의 경우, 아마도 OS가 백그라운드 작업 타임 아웃을위한 논리를 죽이고 있습니까? 나는 정보 설정에서 "필요한 백그라운드 모드"를 확인하는 것을 잊어 버린 경우를 한 번 가지고있었습니다 ... –

+0

나는 내 문제에 대한 해결책을 가졌습니다. iOS6에서는 "didUpdateToLocation"대신 "didUpdateLocations"를 사용해야합니다. 그것은 무슨 문제였습니다. 이제 잘 작동합니다. – sathiamoorthy

답변

1

흠. 일단 당신이 그것을 갱신 할 위치를 시작합니다. 선택한 정확성을 기반으로 거의 논스톱이므로 시작을 계속할 필요가 없습니다. 귀하의 정확성과 일치하는 중요한 위치 변경을 기다릴 것입니다 ...이 모든 효율성 및 전원 거래를 처리합니다. 시뮬레이터를 사용하고 주행 경로 옵션을 선택하려고 했습니까? 움직일 때 더 많은 감각을 느낄 수 있습니다 (한 번만 시작하십시오).

매 15 초마다 ping을하고 다음 업데이 트를 시작하기 만하면됩니다 ... 그리고 나서 현재 위치를 읽으십시오/타이머에서 15 초마다 표제를 찾으시겠습니까?

- (void) actualTask { 
    NSLog("Currently at: %@", MyLocationManager.location.coordinate); 
} 
+0

답장을 보내 주셔서 감사합니다! 사실, 일단 위치가 결정되면 didUpdateToLocation 내에서 stopStandardUpdates를 호출합니다. 따라서 startStandardUpdates를 계속 시작해야했습니다.이것은 또한 여분의 배경 남은 시간을 가지고 있습니다. 나는 또한 시뮬레이터에서 고속도로 주행 모드를 시도했지만 여전히 처음 업데이트 이후에 didUpdateToLocation을받을 수 없었다 ... –

5

_locationManager.distanceFilter = 10; 거리 필터가 10m로 설정되어 있으면 알림을받지 않습니다. 위치가 거리 필터 설정을 초과 할만큼 충분히 이동하면 didUpdateToLocation 콜백이 표시됩니다.

+0

답장을 보내 주셔서 감사합니다! 현재 위치와 관련이 있습니까? 그렇다면 시뮬레이터의 고속도로 주행 모드가 작동하고 didUpdateToLocation을 아마도 호출해야합니까? –

0

건물이나 복잡한 경우 didUpdateLocations이 호출되지 않습니다. GPS를 통해 데이터를 가져오고 데이터를 수신 할 수 있도록 공간을 열어 이동하면서 기기를 빌드하는 것과 같은 실시간 테스트가 가능한 경우 당신이 그 때 걷는 경우에 또한 자주 얻지 않는다 didUpdateLocations. 자동차/버스 또는 자전거에서 테스트해야합니다. 코드에서

0

, kCLDistanceFilterNone이에 대한 모든 솔루션을 가지고 있나요

관련 문제