//
// MyCoreLocation.h
// bameng
//
// Created by lhb on 16/11/11.
// Copyright © 2016年 HT. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "CMNetWorkHeader.h"
@protocol MyCoreLocationDelegate <NSObject>
@end
@interface MyCoreLocation : NSObject
+(instancetype)MyCoreLocationShare;
- (void)MyCoreLocationStartLocal:(UIViewController *)vc;
- (void)MyCoreLocationStopLocal;
@property(nonatomic,weak) id <MyCoreLocationDelegate> delegate;
//0、 表示不强制 1、强制
@property(nonatomic,assign) int forceOpenLocal;
@end
//
// MyCoreLocation.m
// bameng
//
// Created by lhb on 16/11/11.
// Copyright © 2016年 HT. All rights reserved.
//
#import "MyCoreLocation.h"
#import <CoreLocation/CoreLocation.h>
@interface MyCoreLocation ()<CLLocationManagerDelegate>
/**
* 定位管理器
**/
@property (nonatomic, strong) CLLocationManager * locationManager;
/**
* 地理编码
**/
@property (nonatomic, strong) CLGeocoder *geoC;
@end
@implementation MyCoreLocation
static MyCoreLocation * _CoreLocationinstance;
- (CLGeocoder *)geoC{
if (_geoC == nil) {
_geoC = [[CLGeocoder alloc] init];
}
return _geoC;
}
- (CLLocationManager *)locationManager{
if(_locationManager == nil){
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
_locationManager.distanceFilter = 100.0;
[_locationManager requestWhenInUseAuthorization];
}
return _locationManager;
}
+(instancetype)MyCoreLocationShare{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if(_CoreLocationinstance == nil){
_CoreLocationinstance = [[self alloc] init];
}
});
return _CoreLocationinstance;
}
- (instancetype)init{
if (self = [super init]) {
[self locationManager];
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
NSLog(@"用户授权成功");
}else if(status == kCLAuthorizationStatusDenied || status == kCLAuthorizationStatusRestricted){
NSLog(@"用户授权失败");
[self doDeniey];
}
}
- (void)doDeniey{
if (self.forceOpenLocal) {
UIViewController * vc = [LWTool getCurrentVC];
if (vc.navigationController.viewControllers.count > 1) {
[vc.navigationController popViewControllerAnimated:YES];
}
}
}
- (void)locationManager:(CLLocationManager * )manager didUpdateLocations:(NSArray *)locations{
CLLocation* location = [locations lastObject];
[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%g",location.altitude] forKey:@"altitude"];
[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%g",location.coordinate.longitude] forKey:@"longitude"];
[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%g",location.coordinate.latitude] forKey:@"latitude"];
[manager stopUpdatingLocation];
}
- (void)MyCoreLocationStartLocal:(UIViewController *)vc{
if([CLLocationManager locationServicesEnabled]){
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {
[self.locationManager requestWhenInUseAuthorization];
}else if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied){
NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
NSString *appName = [infoDic objectForKey:@"CFBundleDisplayName"];
appName = [NSString stringWithFormat:@"为了更好的体验,请到设置->隐私->定位服务中开启!【%@APP】定位服务,已便获取附近信息!",appName];
UIAlertController * alerc = [UIAlertController alertControllerWithTitle:@"温馨提示" message:appName preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction * action1 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
[self doDeniey];
}];
[alerc addAction:action1];
UIAlertAction * action2 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}];
[alerc addAction:action2];
[[LWTool getCurrentVC] presentViewController:alerc animated:YES completion:nil];
}else{
[self.locationManager startUpdatingLocation];
}
}
}
- (void)MyCoreLocationStopLocal{
[_locationManager stopUpdatingLocation];
}
@end