- #import "ViewController.h"#import < CoreLocation / CoreLocation.h > @interface ViewController() < CLLocationManagerDelegate > @property(nonatomic, strong) CLLocationManager * manager;@end@implementation ViewController - (void) viewDidLoad { [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- // 1、创建管理者
- // self.manager = [[CLLocationManager alloc] init];
- // 2、设置代理人
- self.manager.delegate = self;
- // 设置多久获取一次
- // self.manager.distanceFilter = 500;
- // 设置获取位置的精确度
- /*
- kCLLocationAccuracyBestForNavigation 最佳导航
- kCLLocationAccuracyBest; 最精准
- kCLLocationAccuracyNearestTenMeters; 10米
- kCLLocationAccuracyHundredMeters; 百米
- kCLLocationAccuracyKilometer; 千米
- kCLLocationAccuracyThreeKilometers; 3千米
- */
- // self.manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
- // iOS7 直接可以如此调用
- // self.manager startUpdatingLocation;
- /*
- iOS8 需要向用户申请 并且在info中填写
- NSLocationWhenInUseDescription,允许在前台获取GPS的描述
- NSLocationAlwaysUsageDescription,允许在后台获取GPS的描述
- */
- [self.manager requestAlwaysAuthorization];
- }
- /*
- 已经废弃
- - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
- */
- /**
- * 授权状态发生改变的时候调用->iOS8 iOS7不需要实现这个方法
- *
- * @param manager 触发事件的对象
- * @param status 获取到的状态
- */
- - (void) locationManager: (CLLocationManager * ) manager didChangeAuthorizationStatus: (CLAuthorizationStatus) status {
- /*
- 用户从未选择过权限
- kCLAuthorizationStatusNotDetermined
- 无法使用定位服务,该状态用户无法改变
- kCLAuthorizationStatusRestricted
- 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
- kCLAuthorizationStatusDenied
- 已经授权(废弃)
- kCLAuthorizationStatusAuthorized
- 用户允许该程序无论何时都可以使用地理信息
- kCLAuthorizationStatusAuthorizedAlways
- 用户同意程序在可见时使用地理位置
- kCLAuthorizationStatusAuthorizedWhenInUse
- */
- if (status == kCLAuthorizationStatusNotDetermined) {
- NSLog(@"等待授权");
- } else if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) {
- NSLog(@"授权成功");
- // 开始更新位置
- [manager startUpdatingLocation];
- } else {
- NSLog(@"授权失败");
- }
- }
- /**
- * 地理位置更新的时候会走的方法
- *
- * @param manager 触发事件的对象
- * @param locations 获取到的位置
- */
- - (void) locationManager: (CLLocationManager * ) manager didUpdateLocations: (NSArray * ) locations {
- NSLog(@"%s", __func__);
- // 获取一次位置后停止更新
- // [manager stopUpdatingLocation]
- // 1.获取最后一次的位置
- /*
- location.coordinate; 坐标, 包含经纬度
- location.altitude; 设备海拔高度 单位是米
- location.course; 设置前进方向 0表示北 90东 180南 270西
- location.horizontalAccuracy; 水平精准度
- location.verticalAccuracy; 垂直精准度
- location.timestamp; 定位信息返回的时间
- location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于不行
- */
- /*
- 可以设置模拟器模拟速度
- bicycle ride 骑车移动
- run 跑动
- freeway drive 高速公路驾车
- */
- CLLocation * location = [locations lastObject];
- NSLog(@"%f, %f speed = %f", location.coordinate.latitude, location.coordinate.longitude, location.speed);
- }#pragma mark懒加载
- /**
- * 懒加载->只有一个初始化对象的时候多用懒加载
- *
- * @return CLLocationManager
- */
- - (CLLocationManager * ) manager {
- if (_manager == nil) {
- _manager = [[CLLocationManager alloc] init];
- }
- return _manager;
- } - (void) didReceiveMemoryWarning { [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
来源: http://lib.csdn.net/snippet/ios/42442