사용자의 위치 정보를 계속 가지고오는 작업을 진행했었다.
이번에는 사용자의 위치 정보를 일정 거리 이상 이동했을 때 가지고 오는 방법을 알아보려고 한다.
실시간으로 계속 가지고 온다면 위치 확인 성능은 좋겠지만 배터리 사용량은 증가할테니깐 상황에 맞는 필터를 건다면
성능도 잡고, 기능도 구현하는 좋은 방향이 되지 않을까??
본 글은 앞선 위치 정보 가지고 오기 글을 기준으로 작성했기 때문에 전체적인 코드는 나오지 않습니다.
만약 해당 기능이 필요하다면 글을 먼저 확인 후 여길 다시 찾아주세요!
distanceFilter
locationManager 에서 사용할 수 있는 옵션 중 하나이다. 사용하면 설정해준 거리만큼 이동해야지 다시 호출된다.
- (instancetype)init {
self = [super init];
if (self) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
// iOS 14 이상에서는 정확도 권한을 요청할 수 있습니다.
if (@available(iOS 14.0, *)) {
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
// 위치 서비스 권한 요청
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager requestAlwaysAuthorization];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = 10; // 10m 이동할 때마다 업데이트
// 백그라운드에서도 위치 업데이트를 받을 수 있도록 설정 (iOS 9 이상)
if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
self.locationManager.allowsBackgroundLocationUpdates = YES;
}
self.locationManager.pausesLocationUpdatesAutomatically = NO;
// showsBackgroundLocationIndicator 설정 (iOS 11 이상)
if (@available(iOS 11.0, *)) {
self.locationManager.showsBackgroundLocationIndicator = YES;
}
}
return self;
}
설정 하는 것도 아주 간단하다.
초기화 할 때 추가해주면 된다. 설정해두면 startUpdatingLocation 함수가 설정해둔 거리 이후에 호출된다.
self.locationManager.distanceFilter = 10;
단위는 m 단위로 10을 넣어주면 10m의 거리를 이동한 뒤에 동작한다는 뜻이다.
비교적 높은 정확도가 필요하다면 값을 낮게 주면 자주 호출되면서 GPS 정보를 많이 호출할 수 있을 것이며, 크게하면
호출되는 횟수는 줄어들겠지만 배터리 소모량은 비교적 적어질 것이다.
중간에서 밸런스를 잘 맞추는게 중요하다.
startMonitoringSignificantLocationChanges
앞서 알아본 distanceFilter는 내가 원하는 거리를 설정해서 해당 거리를 이동했을 때 호출된다면
이번에 사용할 것은 시스템에서 설정된 거리만큼 이동해야지 호출시키는 방법이다.
RCT_EXPORT_METHOD(startMonitoringSignificantLocationChanges) {
[self.locationManager startMonitoringSignificantLocationChanges];
}
RCT_EXPORT_METHOD(stopMonitoringSignificantLocationChanges) {
[self.locationManager stopMonitoringSignificantLocationChanges];
}
사용 방법은 간단하다.
실행하는 함수와 종료하는 함수를 추가로 설정해줘야 하지만 따로 거리를 설정할 필요는 없다.
두가지 중 원하는 방법으로 즐거운 개발을 하세요~!
혹은 더 좋은 방법이 있다면 알려주시면 더 감사하구요!
'React Native > 공통' 카테고리의 다른 글
react native flex:1 의 오류 (1) | 2024.11.16 |
---|---|
iOS 실시간 위치 정보 가지고 오기 (1) | 2024.08.24 |
React Native 파이어베이스 배포하기 (1) | 2024.08.10 |
[React Native] 빌드하기 (0) | 2023.08.28 |
[React Native] 첫 프로젝트 (2) | 2022.07.17 |