地理定位(iOS 8.0)
2016-04-21 20:46
281 查看
从iOS8.0开始,苹果进一步加强了对用户隐私的保护。
当APP想访问用户的隐私信息时,系统不再自动弹出一个对话框让用户授权
解决方案:
(1)调用iOS8.0的API,主动请求用户授权
- (void)requestAlwaysAuthorization
//请求允许在前后台都能获取用户位置的授权
- (void)requestWhenInUseAuthorization// 请求允许在前台获取用户位置的授权
(2)务必在info.plist文件中配置对应的键值,否则以上请求授权的方法不生效
NSLocationAlwaysUsageDescription :
允许在前后台获取GPS的描述
NSLocationWhenInUseDescription
:允许在前台获取GPS的描述
当APP想访问用户的隐私信息时,系统不再自动弹出一个对话框让用户授权
解决方案:
(1)调用iOS8.0的API,主动请求用户授权
- (void)requestAlwaysAuthorization
//请求允许在前后台都能获取用户位置的授权
- (void)requestWhenInUseAuthorization// 请求允许在前台获取用户位置的授权
(2)务必在info.plist文件中配置对应的键值,否则以上请求授权的方法不生效
NSLocationAlwaysUsageDescription :
允许在前后台获取GPS的描述
NSLocationWhenInUseDescription
:允许在前台获取GPS的描述
// // ViewController.m #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewController ()<CLLocationManagerDelegate> /** 位置管理者 */ @property (nonatomic, strong) CLLocationManager *lM; @end @implementation ViewController #pragma mark - 懒加载 - (CLLocationManager *)lM { if (!_lM) { // 1. 创建位置管理者 _lM = [[CLLocationManager alloc] init]; // 1.1 代理, 通知, block _lM.delegate = self; // 每隔多米定位一次 // _lM.distanceFilter = 100; /** kCLLocationAccuracyBestForNavigation // 最适合导航 kCLLocationAccuracyBest; // 最好的 kCLLocationAccuracyNearestTenMeters; // 10m kCLLocationAccuracyHundredMeters; // 100m kCLLocationAccuracyKilometer; // 1000m kCLLocationAccuracyThreeKilometers; // 3000m */ // 精确度越高, 越耗电, 定位时间越长 _lM.desiredAccuracy = kCLLocationAccuracyBest; /** -------iOS8.0+定位适配-------- */ if([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { // 前台定位授权(默认情况下,不可以在后台获取位置, 勾选后台模式 location update, 但是 会出现蓝条) // [_lM requestWhenInUseAuthorization]; // 前后台定位授权(请求永久授权) // +authorizationStatus != kCLAuthorizationStatusNotDetermined // 这个方法不会有效 // 当前的授权状态为前台授权时,此方法也会有效 [_lM requestAlwaysAuthorization]; } // if ([_lM respondsToSelector:@selector(requestAlwaysAuthorization)]) // { // [_lM requestAlwaysAuthorization]; // } } return _lM; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 2. 使用位置管理者,开始更新用户位置 // 默认只能在前台获取用户位置, // 勾选后台模式 location updates [self.lM startUpdatingLocation]; } #pragma mark - CLLocationManagerDelegate /** * 更新到位置之后调用 * * @param manager 位置管理者 * @param locations 位置数组 */ -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { NSLog(@"定位到了"); // 拿到位置,做一些业务逻辑操作 // 停止更新 // [manager stopUpdatingLocation]; } /** * 授权状态发生改变时调用 * * @param manager 位置管理者 * @param status 状态 */ -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { switch (status) { // 用户还未决定 case kCLAuthorizationStatusNotDetermined: { NSLog(@"用户还未决定"); break; } // 问受限 case kCLAuthorizationStatusRestricted: { NSLog(@"访问受限"); break; } // 定位关闭时和对此APP授权为never时调用 case kCLAuthorizationStatusDenied: { // 定位是否可用(是否支持定位或者定位是否开启) if([CLLocationManager locationServicesEnabled]) { NSLog(@"定位开启,但被拒"); }else { NSLog(@"定位关闭,不可用"); } // NSLog(@"被拒"); break; } // 获取前后台定位授权 case kCLAuthorizationStatusAuthorizedAlways: // case kCLAuthorizationStatusAuthorized: // 失效,不建议使用 { NSLog(@"获取前后台定位授权"); break; } // 获得前台定位授权 case kCLAuthorizationStatusAuthorizedWhenInUse: { NSLog(@"获得前台定位授权"); break; } default: break; } } @end
相关文章推荐
- ios如何集成百度地图---还是自己动手做一下--网上好多博客说的都不甚靠谱。
- [BS-04] 在iOS中对系统定义的类的readonly属性可通过KVC进行赋值
- 地理定位(iOS7)
- iOS开发————几种音频播放方式
- ios事件的通知方法
- iOS 封装SDK
- 关于ios中的转码问题
- 转发:iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- Nagios 监控系列学习 ―― check_nt 监控windows系统资源
- IOS中,Button的currentTitle和titleLabel.text的使用
- IOS中NSUserDefaults的用法
- A Mathematical Curiosity
- iOS load和initialize方法加载顺序测试结果
- iOS 自带定位功能CoreLocation
- iOS中解析 XML / JSON格式讲解
- IOS开发中,SVN如何恢复到某一个版本(以Cornerstone为例)
- iOS 天气应用代码中文介绍
- iOS9新特性
- iOS获取时间、日期
- iOS环信3.0集成 (一)SDK的集成