标签:
1.创建CoreLocation的管理者。CoreLocation要强引用
2.实现CLLocationManagerDelegate代理。
3.开始或停止代理
#import <CoreLocation/CoreLocation.h>
@interface ViewController () <CLLocationManagerDelegate>
@property (nonatomic, strong)CLLocationManager *mrg;
@end
@implementation ViewController
-(CLLocationManager *)mrg
{
if (_mrg == nil) {
//1,创建CoreLocation的管理者
self.mrg = [[CLLocationManager alloc] init];
}
return _mrg;
}
- (void)viewDidLoad {
[super viewDidLoad];
//2,成为CoreLocation的代理
self.mrg.delegate = self;
//3,开始定位
[self.mrg startUpdatingLocation];
}
#pragma mark - CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"%s",__func__);
//打印位置信息
/*
location.coordinate; 坐标, 包含经纬度
location.altitude; 设备海拔高度 单位是米
location.course; 设置前进方向 0表示北 90东 180南 270西
location.horizontalAccuracy; 水平精准度
location.verticalAccuracy; 垂直精准度
location.timestamp; 定位信息返回的时间
location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于不行
*/
CLLocation *location = [locations lastObject];
NSLog(@"%f,%f",location.coordinate.latitude,location.coordinate.longitude);
// 获取到位置信息之后就会调用(调用频率非常高).如果只需要获取一次, 就要在这里设置停止
// [self.mgr stopUpdatingLocation];
}
iOS7只要开始定位, 系统就会自动要求用户对你的应用程序授权. 但是从iOS8开始, 想要定位必须先"自己""主动"要求用户授权.在iOS8中不仅仅要主动请求授权, 而且必须再info.plist文件中配置一项属性才能弹出授权窗口,value值可以随意写
NSLocationWhenInUseDescription,允许在前台获取GPS的描述
NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述
if([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0)
{
NSLog(@"是iOS8");
// 主动要求用户对我们的程序授权, 授权状态改变就会通知代理
[self.mgr requestAlwaysAuthorization]; // 请求前台和后台定位权限
// [self.mgr requestWhenInUseAuthorization]; // 请求前台定位权限
}
//iOS8中需要额外添加在个代理方法
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
/*
用户从未选择过权限
kCLAuthorizationStatusNotDetermined
无法使用定位服务,该状态用户无法改变
kCLAuthorizationStatusRestricted
用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
kCLAuthorizationStatusDenied
已经授权(废弃)
kCLAuthorizationStatusAuthorized
用户允许该程序无论何时都可以使用地理信息
kCLAuthorizationStatusAuthorizedAlways
用户同意程序在可见时使用地理位置
kCLAuthorizationStatusAuthorizedWhenInUse
*/
if (status == kCLAuthorizationStatusNotDetermined) {
NSLog(@"等待用户授权");
}else if (status == kCLAuthorizationStatusAuthorizedAlways ||
status == kCLAuthorizationStatusAuthorizedWhenInUse)
{
NSLog(@"授权成功");
// 开始定位
[self.mgr startUpdatingLocation];
}else
{
NSLog(@"授权失败");
}
}
1.// 设置多久获取一次(单位是米,超出多米就开始调用) self.mgr.distanceFilter = 500; 2.// 设置获取位置的精确度 /* kCLLocationAccuracyBestForNavigation 最佳导航 kCLLocationAccuracyBest; 最精准 kCLLocationAccuracyNearestTenMeters; 10米 kCLLocationAccuracyHundredMeters; 百米 kCLLocationAccuracyKilometer; 千米 kCLLocationAccuracyThreeKilometers; 3千米 */ self.mgr.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
标签:
原文地址:http://my.oschina.net/u/2346786/blog/508699