【iOS】地图定位无效及点击设置隐私定位直接闪退问题
来源:互联网 发布:上古卷轴美女捏脸数据 编辑:程序博客网 时间:2024/05/17 05:07
摘要:前段时间在做地图定位搜索的时候,遇到定位失败和不能通过系统设置-->隐私-->定位来设置定位权限的问题,具体情况:点击设置中的“隐私”-->定位-->点击自己程序,iOS7反应正常,iOS8则直接崩溃的问题,下面总结一下,供大家遇到该类问题参考。
1.iOS8点击设置-->隐私-->定位-->对应程序,设置界面闪退问题解决
(1)plist文件新加两条变量:
a、NSLocationAlwaysUsageDescription=YES;
b、NSLocationWhenInUseUsageDescription=YES
通常情况,plist文件中有这两个字段,但是可能的是BOOL类型,如果是则改成NSString类型。
正常情况:
导致闪退的情况:
(2)判断手机是否为iOS8系统,请求权限
locationManager = [[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.distanceFilter = kCLDistanceFilterNone;locationManager.desiredAccuracy = kCLLocationAccuracyBest;if(IOS8){// [locationManager requestAlwaysAuthorization];//始终[locationManager requestWhenInUseAuthorization];//使用期间}[locationManager startUpdatingLocation];(3)增加代理方法
– (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{ switch (status) { case kCLAuthorizationStatusNotDetermined: if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { [locationManager requestWhenInUseAuthorization]; } break; default: break; }}
2.iOS定位无效问题
iOS8之前做的app,之前正常使用,升级到iOS8之后,定位不能正常工作,程序也不报错。具体情况:重装英语再调用定位服务时会弹出授权对话框,但是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的枚举:
<span style="font-size:14px;">typedef NS_ENUM(int, CLAuthorizationStatus) { // 用户从未选择过权限 kCLAuthorizationStatusNotDetermined = 0, // 无法使用定位服务,该状态用户无法改变 kCLAuthorizationStatusRestricted, // 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态 kCLAuthorizationStatusDenied, // 这个值已弃用 kCLAuthorizationStatusAuthorized // 大致是用户允许该程序无论何时都可以使用地理信息 kCLAuthorizationStatusAuthorizedAlways // 大致是用户同意程序在可见时使用地理位置 kCLAuthorizationStatusAuthorizedWhenInUse };</span>总结一下这个问题就是在以前的IOS版本中当开始使用定位服务时会自动弹出询问授权的对话框,而现在IOS8需要手动调用locationManager requestAlwaysAuthorization手动申请授权,来获取定位权限。
3.iOS开发系列--地图与定位
如何使用地图和定位,现在转载一篇文章,参考一下。转载自:http://www.cnblogs.com/kenshincui/p/4125570.html
- 【iOS】地图定位无效及点击设置隐私定位直接闪退问题
- iOS 定位 点击设置->隐私->定位 闪退的问题
- 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题
- 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题
- ios8 点击设置->隐私->定位服务手机闪退
- ios8定位问题,以及在iphone点击设置隐私定位功能直接崩溃的问题
- iOS地图定位设置问题详解
- 关于iOS8设置-隐私-定位崩溃问题
- 设置-》隐私-》定位 崩溃
- iOS8定位问题,在iPhone设置中点击开启定位功能直接崩溃的问题
- iOS[地图定位问题]:求解地图定位问题!!!
- iOS 高德地图API不能定位及INVALID_USER_SCODE问题
- iOS 高德地图API不能定位及INVALID_USER_SCODE问题
- ios 定位bug闪退,崩溃点
- ios的 定位 及高德地图定位
- iOS 系统地图实现及定位
- iOS开发地图定位及地理编码
- iOS中Tableview右边有字母检索 点击可以直接定位显示的问题
- Linux系统编程——进程替换:exec 函数族
- ACM-字符串替换
- zabbix tomcat requestCount监控
- 成员初始化表的作用 实例解析
- hostapd源代码分析(三):管理帧的收发和处理
- 【iOS】地图定位无效及点击设置隐私定位直接闪退问题
- Astyle使用方法
- JDBC 实战应用
- 02-线性结构3. Pop Sequence (25)
- VS2013禁止生成ipch和sdf文件
- 套接字基础知识
- Sirius:密歇根大学开发的免费开源版“Siri”
- 建议java程序员读的几本书
- AP模式中多重基础服务集(Multi-BSS)下帧的接收