2017-01-12 7 views
-2

ios 앱에서 위치를 한 번만 가져 오는 방법.ios에서 위치를 한 번만 가져 오는 방법

+1

무엇이 문제입니까? –

+1

지금 직면 한 문제를 저희에게 알려주십시오. – Manishankar

+0

OP가 솔루션을 공유하려고하는 경우 일 수 있습니다. 이 경우 담당자는 QA로 게시해야합니다. 원래 문제를 진술 한 질문을 게시 한 다음 문제의 진술과 문제 해결 방법이 아닌 제안 된 솔루션으로 답변을 게시하십시오. – jcaron

답변

3

위치를 얻은 후에 locationManager 업데이트를 중지하고 더 이상 locationManager가 필요 없기 때문에 locationManager를 해제하십시오. IOS 9 이상

[self.locationManager stopUpdatingLocation]; 
self.locationManager.delegate = nil; 
self.locationManager = nil; 
0

우리 방법 [locationManagerInstance requestLocation]있다. 그러나 위치가 최신이고 최상이기 때문에 위임 방법을 다시 호출하는 데는 약 10 초가 걸릴 것입니다.

다른 방법으로 (이전 ios9 버전의 경우) 이전 위치 [locationManagerInstance startUpdatingLocation]을 사용하여 즉각적인 위치를 얻고 최상의 정확성을 위해 타임 스탬프의 유효성을 검사 할 수 있습니다.

위치를 가져 오는 데 사용하는 코드는 다음과 같습니다. locationManager 인스턴스에 대한 전역 참조를 만듭니다.

@interface ViewController() 
{ 
    CLLocationManager *locationManager; 
} 

your.m 파일에서 이러한 유틸리티 메소드를 구현

-(BOOL)canUseLocationManager{ 
    if(([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) || ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways)){ 
     return YES; 
    } 
    return NO; 
} 

-(void) getCurrentLocation { 
    locationManager.delegate = self; 
    // ios 9 and above versions only 
    //[locationManager requestLocation]; // This may take more time when compare to alternate method 
    // ios 2 and later versions can use this method 
    [locationManager startUpdatingLocation]; 
} 

-(void) stopGettingCurrentLocation { 
    [locationManager stopUpdatingLocation]; 
} 

구현 위치 서비스 대표

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{ 
    if([CLLocationManager authorizationStatus] != kCLAuthorizationStatusNotDetermined){ 
     [self doneCheckingAccessStatusForLocation]; 
    } 
} 

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ 
    [manager stopUpdatingLocation]; 
    locationManager.delegate = nil; 
    /* Clean the locationManager instance if you don't need*/ 
    //locationManager = nil; 
} 

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 

    [manager stopUpdatingLocation]; 
    locationManager.delegate = nil; 

    CLLocation* location = [locations lastObject]; 
    NSDate* eventDate = location.timestamp; 

    /* Implement your business logics here */ 
    /* Clean the locationManager instance if you don't need*/ 
    //locationManager = nil; 
} 
위치 관리 프로그램 인스턴스를 만들 수

마지막 방법과 위치를

-(void)checkForLocationService{ 
    if(!locationManager){ 
     locationManager = [[CLLocationManager alloc] init]; 
     locationManager.distanceFilter = kCLDistanceFilterNone; 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    } 
    locationManager.delegate = self; 
    if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){ 
     [locationManager requestWhenInUseAuthorization]; 
    }else{ 
     [self doneCheckingAccessStatusForLocation]; 
    } 

} 

-(void)doneCheckingAccessStatusForLocation{ 
    if([self canUseLocationManager]){ 
     [self getCurrentLocation]; 
    } 
} 
를 가져 오는 개시 할

checkForLocationService 메소드를 호출하고 성공 및 실패 위임 메소드에 대한 논리를 구현하십시오.

[self checkForLocationService];