iOS的配置权限,问度娘
#import <CoreLocation/CoreLocation.h>
@interface ZJLocManager : CLLocationManager
+(instancetype)share;
/* 获取位置信息
* @param allows 是否持续定位
* @param successBlock 定位成功回调
*/
-(void)locationIsAllows:(BOOL) allows SuccessBlock:(void(^)(NSString * locInfo,CLLocationCoordinate2D coord))successBlock;
@end
#import "ZJLocManager.h"
static ZJLocManager * manager = nil;
@interface ZJLocManager() <CLLocationManagerDelegate>
// 持续定位回调
@property(nonatomic,copy) void(^allowsSuccessBlock)(NSString * locInfo,CLLocationCoordinate2D coord);
// 只需定位一次回调
@property(nonatomic,copy) void(^successBlock)(NSString * locInfo,CLLocationCoordinate2D coord);
@end
@implementation ZJLocManager
+(instancetype) share {
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
manager = [[ZJLocManager alloc] init];
manager.desiredAccuracy = kCLLocationAccuracyBest; //定位精确度
manager.distanceFilter = kCLDistanceFilterNone;//实时更新定位位置
if([manager respondsToSelector:@selector(requestAlwaysAuthorization)]){
[manager requestAlwaysAuthorization];
}
//该模式是抵抗程序在后台被杀,申明不能够被暂停
manager.pausesLocationUpdatesAutomatically = NO;
//
if (@available(iOS 9.0, *)) {
manager.allowsBackgroundLocationUpdates = NO;
}
});
return manager;
}
//
-(void)locationIsAllows:(BOOL)allows SuccessBlock:(void(^)(NSString * locInfo,CLLocationCoordinate2D coord))successBlock{
[self startZJLocation];
if(allows){
self.allowsSuccessBlock = successBlock;
}else{
self.successBlock = successBlock;
}
}
// 开始定位
-(void)startZJLocation{
manager.delegate = self;
[self startUpdatingLocation];
}
// 停止定位
-(void) stopZJLocation{
manager.delegate = nil;
[self stopUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *newLocation = [locations lastObject];
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray<CLPlacemark *> *_Nullable placemarks, NSError * _Nullable error) {
CLPlacemark *place = [placemarks firstObject];
NSDictionary *address = [place addressDictionary];
NSString * locInfo =[NSString stringWithFormat:@"%@-%@-%@-%@-%@",[address objectForKey:@"State"],[address objectForKey:@"City"],[address objectForKey:@"SubLocality"],[address objectForKey:@"Thoroughfare"],[address objectForKey:@"Name"]];
if(self.successBlock){
self.successBlock(locInfo,newLocation.coordinate);
self.successBlock = nil;
}
if(self.allowsSuccessBlock){
self.allowsSuccessBlock(locInfo,newLocation.coordinate);
}
// for (CLPlacemark *place in placemarks) {
// }
}];
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
if ([error code] == kCLErrorDenied){
//访问被拒绝
}
if ([error code] == kCLErrorLocationUnknown) {
//无法获取位置信息
//[MBProgressHUD showError:@"获取位置信息失败" ];
}
NSLog(@"获取定位信息失败");
}
@end