* [ios] The new location manager API provides two new protocols MGLLocationManager and MGLLocationManagerDelegate to handle the location cycle and updates respectively. This enables developers to chose the appropriate location provider according to their needs, or transition between outdoors/indoors location updates. It does provide a default implementation based on CLLocationManager.
117 lines
3.1 KiB
Objective-C
117 lines
3.1 KiB
Objective-C
#import "MGLLocationManager_Private.h"
|
|
|
|
@interface MGLCLLocationManager()<CLLocationManagerDelegate>
|
|
|
|
@property (nonatomic) CLLocationManager *locationManager;
|
|
|
|
@end
|
|
|
|
@implementation MGLCLLocationManager
|
|
|
|
- (instancetype)init
|
|
{
|
|
if (self = [super init]) {
|
|
_locationManager = [[CLLocationManager alloc] init];
|
|
_locationManager.delegate = self;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
@synthesize delegate;
|
|
|
|
- (void)setHeadingOrientation:(CLDeviceOrientation)headingOrientation
|
|
{
|
|
self.locationManager.headingOrientation = headingOrientation;
|
|
}
|
|
|
|
- (CLDeviceOrientation)headingOrientation
|
|
{
|
|
return self.locationManager.headingOrientation;
|
|
}
|
|
|
|
- (void)setDesiredAccuracy:(CLLocationAccuracy)desiredAccuracy {
|
|
self.locationManager.desiredAccuracy = desiredAccuracy;
|
|
}
|
|
|
|
- (CLLocationAccuracy)desiredAccuracy {
|
|
return self.locationManager.desiredAccuracy;
|
|
}
|
|
|
|
- (CLAuthorizationStatus)authorizationStatus {
|
|
return [CLLocationManager authorizationStatus];
|
|
}
|
|
|
|
- (void)setActivityType:(CLActivityType)activityType {
|
|
self.locationManager.activityType = activityType;
|
|
}
|
|
|
|
- (CLActivityType)activityType {
|
|
return self.locationManager.activityType;
|
|
}
|
|
|
|
- (void)dismissHeadingCalibrationDisplay {
|
|
[self.locationManager dismissHeadingCalibrationDisplay];
|
|
}
|
|
|
|
- (void)requestAlwaysAuthorization {
|
|
[self.locationManager requestAlwaysAuthorization];
|
|
}
|
|
|
|
- (void)requestWhenInUseAuthorization {
|
|
[self.locationManager requestWhenInUseAuthorization];
|
|
}
|
|
|
|
- (void)startUpdatingHeading {
|
|
[self.locationManager startUpdatingHeading];
|
|
}
|
|
|
|
- (void)startUpdatingLocation {
|
|
[self.locationManager startUpdatingLocation];
|
|
}
|
|
|
|
- (void)stopUpdatingHeading {
|
|
[self.locationManager stopUpdatingHeading];
|
|
}
|
|
|
|
- (void)stopUpdatingLocation {
|
|
[self.locationManager stopUpdatingLocation];
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[self.locationManager stopUpdatingLocation];
|
|
[self.locationManager stopUpdatingHeading];
|
|
self.locationManager.delegate = nil;
|
|
self.delegate = nil;
|
|
}
|
|
|
|
#pragma mark - CLLocationManagerDelegate
|
|
|
|
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
|
|
if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) {
|
|
[self.delegate locationManager:self didUpdateLocations:locations];
|
|
}
|
|
}
|
|
|
|
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
|
|
if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateHeading:)]) {
|
|
[self.delegate locationManager:self didUpdateHeading:newHeading];
|
|
}
|
|
}
|
|
|
|
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager {
|
|
if ([self.delegate respondsToSelector:@selector(locationManagerShouldDisplayHeadingCalibration:)]) {
|
|
return [self.delegate locationManagerShouldDisplayHeadingCalibration:self];
|
|
}
|
|
|
|
return NO;
|
|
}
|
|
|
|
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
|
|
if ([self.delegate respondsToSelector:@selector(locationManager:didFailWithError:)]) {
|
|
[self.delegate locationManager:self didFailWithError:error];
|
|
}
|
|
}
|
|
|
|
@end
|