IOS8定位无效问题 - Jeedaa_IOS

我的一个程序,以前都好用的,包括ios6,ios7,但是手机升级到iOS8后,xcode6编译运行,就不能正常工作了,也不报错。现象是进到设置里隐私-定位服务 下面找到这个应用,设为总是允许,就可以正常获取地理信息,但是再重新编译运行,它又会变成这个未知状态。

琢磨后想起来以前重装应用再调用定位服务时会弹出授权对话框,但是IOS8怎么没弹呢,于是加入 调用locationManager requestAlwaysAuthorization手动申请授权,然后你可以在didChangeAuthorizationStatus这个回调里面监测是否可以具有定位权限。但是有几点要注意当你调用这个request的时候,它弹出的对话框里面的那句询问语,需要我们自己指定。所以需要在info.plist里面添加一个key: NSLocationAlwaysUsageDescription,value就是对话框上想要询问的语句。这时候程序才能正确的弹出授权对话框,用户选了同意以后,定位代码就正确的运行。

_instance.locationManager = [[CLLocationManager alloc] init];//创建位置管理器
  _instance.locationManager.delegate=_instance;
  _instance.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
  _instance.locationManager.distanceFilter=100.0f;
  _instance.updating=NO;
  //定位服务是否可用
  BOOL enable=[CLLocationManager locationServicesEnabled];
  //是否具有定位权限
  int status=[CLLocationManager authorizationStatus];
  if(!enable || status<3){
      //请求权限
      [_instance.locationManager requestWhenInUseAuthorization];
  }

在看看authorizationStatus的枚举吧

typedef NS_ENUM(int, CLAuthorizationStatus) {
  // 用户从未选择过权限
  kCLAuthorizationStatusNotDetermined = 0,
  // 无法使用定位服务,该状态用户无法改变
  kCLAuthorizationStatusRestricted,
  // 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态
  kCLAuthorizationStatusDenied,
  // 这个值已弃用
  kCLAuthorizationStatusAuthorized // 大致是用户允许该程序无论何时都可以使用地理信息
  kCLAuthorizationStatusAuthorizedAlways // 大致是用户同意程序在可见时使用地理位置
  kCLAuthorizationStatusAuthorizedWhenInUse
};

也就是[CLLocationManager authorizationStatus]返回大于等于3时才是可以使用定位服务的。

总结一下这个问题就是在以前的IOS版本中当开始使用定位服务时会自动弹出询问授权的对话框,而现在IOS8需要手动调用locationManager requestAlwaysAuthorization手动申请授权,来获取定位权限。

时间: 2024-08-04 15:05:20

IOS8定位无效问题 - Jeedaa_IOS的相关文章

IOS8定位无效问题

我的一个程序,以前都好用的,包括ios6,ios7,但是手机升级到iOS8后,xcode6编译运行,就不能正常工作了,也不报错.现象是进到设置里隐私-定位服务下面找到这个应用,设为总是允许,就可以正常获取地理信息,但是再重新编译运行,它又会变成这个未知状态. 琢磨后想起来以前重装应用再调用定位服务时会弹出授权对话框,但是IOS8怎么没弹呢,于是加入调用locationManager requestAlwaysAuthorization手动申请授权,然后你可以在didChangeAuthoriza

ios项目开发— iOS8 定位功能API改变

iOS8 定位新增功能 一.  Core Location framework的变化主要有以下几点:         1. 在定位状态中引入Always 和WhenInUse的概念.         2. 加入Visit monitoring的特性, 这类特性特别适合旅行类别的应用,当用户到达某个指定的区域内,monitor开始作用.         3.加入室内定位技术,增加CLFloor, 在室内可以得到楼层信息. 下面针对这三种分别详细的讲一下使用方法. 二..定位的种类分为: 持续的更新

iOS8定位与地图

iOS开发系列--地图与定位 转载:http://www.cnblogs.com/kenshincui/ 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看

iOS8 定位失败问题

时间:2014-10-10 今天在开发的时候发现了一个iOS8的定位问题,执行操作之后,不会调用到定位之后的delegate方法中,然后我查看了一下手机上对应用的定位权限界面,发现我的应用的访问用户的地理位置的权限是空的,之后查了相关信息,得到以下解决方案: 1. Appdelegate中: CLLocationManager *locationManager; [UIApplication sharedApplication].idleTimerDisabled = TRUE; locatio

iOS8定位失败

今天在开发的时候发现了一个iOS8的定位问题,执行操作之后,不会调用到定位之后的delegate方法中,然后我查看了一下手机上对应用的定位权限界面,发现我的应用的访问用户的地理位置的权限是空的,之后查了相关信息,得到以下解决方案: 1. Appdelegate中: if (IOS_VERSION >=8) { locationManager = [[CLLocationManager alloc] init]; [locationManager requestAlwaysAuthorizatio

iOS8 定位补充

iOS 8定位补充 iOS 8定位需要修改2个地方 1.info.plist文件中添加NSLocationAlwaysUsageDescription:描述信息 从iOS 8开始,用户定位分两种情况 总是使用用户位置:NSLocationAlwaysUsageDescription 使用应用时定位:NSLocationWhenInUseDescription 2.在CLLocationManager中调用 - (void)requestAlwaysAuthorization - (void)re

[ios]iOS8 定位

参考:http://www.2cto.com/kf/201410/342392.html http://blog.csdn.net/yongyinmg/article/details/39521523 http://blog.devzeng.com/blog/ios8-corelocation-framework.html iOS8的定位问题,执行操作之后,不会调用到定位之后的delegate方法中,然后我查看了一下手机上对应用的定位权限界面,发现我的应用的访问用户的地理位置的权限是空的,之后查

ios7 ios8 定位兼容性问题解决方案

最近开发的app定位功能在ios8上能够正常运行,但是到了ios7的机器上就不能正常运行了,原因是两个系统的定位有些不一样,针对不同的系统是需要做一些处理的.一下是我的一些处理方法. @property(nonatomic, strong) CLLocationManager * locMgr; - (CLLocationManager *)locMgr { if (_locMgr == nil) { self.locMgr = [[CLLocationManager alloc]init];

ios8 定位授权问题 (plist文件设置字段 手动调用授权仍然不能弹出alertview窗口)

ios8 的地图定位和以前版本有了很大不同,主要是加入了询问用户是否授权定位服务. 参照网上其他人的做法 1 plist文件加入两个字段 NSLocationAlwaysUsageDescription  NSLocationWhenInUseUsageDescription 2 调用 requestAlwaysAuthorization 但是,仍然不能弹出窗口的问题!!!!! 本人就遇到,解决方法其实很简单,但让人想不到. 在targert->info 中加入 NSLocationAlways