Files
UTM/Services/UTMLocationManager.m
2023-06-28 20:02:38 -05:00

67 lines
2.1 KiB
Objective-C

//
// Copyright © 2020 osy. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "UTMLocationManager.h"
#import "UTMLogging.h"
@import CoreLocation;
@interface UTMLocationManager () <CLLocationManagerDelegate>
@property (nonatomic) CLLocationManager *locationManager;
@end
@implementation UTMLocationManager
+ (instancetype)sharedInstance {
static id sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
UTMLocationManager *instance = sharedInstance;
instance.locationManager = [[CLLocationManager alloc] init];
instance.locationManager.delegate = instance;
instance.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
instance.locationManager.pausesLocationUpdatesAutomatically = NO;
});
return sharedInstance;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
UTMLog(@"Location manager failed with: %@", error);
}
- (void)locationManagerDidChangeAuthorization:(CLLocationManager *)manager {
if (manager.authorizationStatus == kCLAuthorizationStatusDenied) {
UTMLog(@"Location services are disabled in settings.");
} else {
[self startUpdatingLocation];
}
}
- (void)startUpdatingLocation {
[self.locationManager requestAlwaysAuthorization];
self.locationManager.allowsBackgroundLocationUpdates = YES;
[self.locationManager startUpdatingLocation];
}
@end