扒虫篇 - 定位授权前地图定位造成的黑屏

前言

公司一款App使用到了地图定位,可是从AppStore下载下来后,第一次安装完后出现了黑屏的现象。

Paste_Image.png

Paste_Image.png

控制台打印的信息为:

Paste_Image.png

分析造成此现象的原因

  • 由于是点击了允许定位当前用户的地位位置后出现的现象,而且第二次启动应用时是没有出现这样的现象的情况,所以考虑是由于系统定位权限造成的。
  • 由于注释掉地图展示当前用户位置的代理方法,就不会出现这样的现象,所以考虑是由于未获得系统定位权限,地图就进行定位而造成的系统级别Bug。

解决方案

在系统的AppDegate 类中申请系统的定位,使地图在定位之前获取到系统的定位权限,即可解决这个系统级别的Bug

代码

 [CLLocationManager locationServicesEnabled]
 //检测的是整个iOS系统的位置服务开关,
 //无法检测当前应用是否被关闭,只能通过CLLocationManagerDelegate的locationManager:didFailWithError:方法去检测:
在代理方法中查看权限是否改变
  - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
 switch (status) { 
 case kCLAuthorizationStatusAuthorizedAlways: NSLog(@"Always Authorized"); break;
 case kCLAuthorizationStatusAuthorizedWhenInUse: NSLog(@"AuthorizedWhenInUse"); break; 
 case kCLAuthorizationStatusDenied: NSLog(@"Denied"); break; 
 case kCLAuthorizationStatusNotDetermined: NSLog(@"not Determined"); break;
 case kCLAuthorizationStatusRestricted: NSLog(@"Restricted"); break; default: break;
}}

 /**
    第一次执行以下语句时会有系统定位权限弹框弹出
  */
 CLLocationManager *manager = [[CLLocationManager alloc] init];      
  [manager requestAlwaysAuthorization];//一直获取定位信息
  [manager requestWhenInUseAuthorization];//使用的时候获取定位信息

权限弹框一闪而过的问是CLLocationManager的实例是局部变量在方法中被释放了,所以把它改为全局变量或静态变量就可以了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

HTTP协议漫谈

简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

40060
来自专栏网络

CobaltStrike团体服务器部署并后台运行

大家好,我是你们的老朋友Alex。Cobaltstrike的部署安装很简单,但是在实际使用中出现了问题。我把团队服务器放在ECS上,出现了两个问题:1.客户端无...

37860
来自专栏WindCoder

Windows 7下硬盘安装Ubuntu 13.10图文教程

之前一直在虚拟机里玩Linux了,昨天忽然兴起想往真机里装一个,昨天找到的方法,今天折腾了半天终于装好啦。

48410
来自专栏Golang语言社区

HTTP协议漫谈

简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

375130
来自专栏pangguoming

CentOS7下FTP的安装与配置

2.2K20
来自专栏博客园迁移

jenkins自动部署应用到tomcat中,编译后shell脚本的简单示例

1.先配置好jenkins需要用到的其他外部组件  jdk,maven,git/svn

25230
来自专栏前端之路

web安全之XSS攻击

19030
来自专栏娱乐心理测试

关于支付宝授权登录获取用户信息

1.6K40
来自专栏云计算教程系列

如何在Ubuntu 13.10上使用Varnish和Nginx配置集群Web服务器

集群Web服务器是Web托管中使用的一种技术,用于在多个计算机或“节点”之间分配负载。此技术的目的是消除单点故障并提高网站可用性和正常运行时间。通常,Web群集...

17200
来自专栏FreeBuf

如何在安卓移动终端进行一次渗透实验?

下面的实验将通过使用一个虚拟Android系统作为实验主体来进行展示。在这个实验中,通过使用虚拟Android系统,模拟移动终端的操作,来帮助我们逐步实现使用一...

36460

扫码关注云+社区

领取腾讯云代金券