ios 앱에서 위치를 한 번만 가져 오는 방법.ios에서 위치를 한 번만 가져 오는 방법
-2
A
답변
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];
무엇이 문제입니까? –
지금 직면 한 문제를 저희에게 알려주십시오. – Manishankar
OP가 솔루션을 공유하려고하는 경우 일 수 있습니다. 이 경우 담당자는 QA로 게시해야합니다. 원래 문제를 진술 한 질문을 게시 한 다음 문제의 진술과 문제 해결 방법이 아닌 제안 된 솔루션으로 답변을 게시하십시오. – jcaron