1、定位 使用CoreLocation框架
2、IOS8、IOS9之后的改变
IOS8之后添加的功能
(1)定位服务(有两种状态1、一直使用定位 2、当使用APP的时候使用定位)
《1》NSLocationAlwaysUsageDescription
《2》NSLocationWhenInUseUsageDescription(在Info.plist文件的最后一项添加 如果忘记写 就不能使用定位功能,并且也不提醒)
2、请求用户授权
《1》requestAlwaysAuthorization
《2》requestWhenInUseAuthorization(如果和描述的目的不匹配,也不能使用定位功能)
IOS9之后的改变:按Home键进入后台 如果需要继续定位
《1》在info.plist添加Required background modes->App registers for location updates如果不添加这对键值却使用后台定位功能会直接奔溃
《2》allowsBackgroundLocationUpdates属性需要设置成YES
主要分为六个步骤:
//《0》判断用户是否在设置中打开了定位服务功能
if(![CLLocationManagerlocationServicesEnabled]) {
//NSLog(@"用户打开了位置服务功能");
/*
//1、跳弹出框提示用户打开步骤
UIAlertController *alerController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请在设置中打开定位服务功能" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction*alerAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[alerController addAction:alerAction];
[self presentViewController:alerController animated:YES completion:nil];
*/
//2、通过代码跳到设置页面
//openURL:可以用于跳转APP,也可以跳到IOS允许跳到的页面
//[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
//判断可不可以打开设置页面
if([[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]]) {
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]];
}
}
//1、创建一个定位管理者的对象
locationmanager= [[CLLocationManageralloc]init];
//设置多少米去更新定位信息
locationmanager.distanceFilter=100;
//设置定位的精准度
locationmanager.desiredAccuracy=10;
//2、info中添加描述使用定位的目的,并向用户申请授权
[locationmanagerrequestAlwaysAuthorization];
//3、挂上代理并实现代理方法
locationmanager.delegate = self;
//4、是否使用后台定位的功能
locationmanager.allowsBackgroundLocationUpdates = YES;
//5、开始定位
[ locationmanager startUpdatingLocation];
}
代理方法:
- (void)locationManager:(CLLocationManager*)manager
didUpdateLocations:(NSArray *)locations{
// CLLocation常用属性
// coordinate(当前位置所在的经纬度)
// altitude(海拔)
// speed(当前速度)
// course (航向)
// -distanceFromLocation(获取两个位置之间的直线物理距离)
CLLocation*location = [locations lastObject];
// 1.获取偏向角度
NSString*angleStr =nil;
switch((int)location.course/90) {
case0:
angleStr =@"北偏东";
break;
case1:
angleStr =@"东偏南";
break;
case2:
angleStr =@"南偏西";
break;
case3:
angleStr =@"西偏北";
break;
default:
angleStr =@"未知位置";
break;
}
NSLog(@"航向%@",angleStr);
}
- (void)locationManager:(CLLocationManager*)manager
didFailWithError:(NSError*)error{
NSLog(@"定位失败");
NSLog(@"%@",error);
}
网友评论