地图定位IOS8之后的定位

从ios8开始,苹果进一步加强了对用户隐私的保护。

  当app想要访问用户的隐私信息时  系统不再自动弹出一个对话框让用户授权

 

解决方法:

(1)调用ios8.0的API 主动请求用户授权

- (void)requestAlwaysAuthorization //请求允许在前后台都能获取用户位置的特权

- (void)requestWhenInUseAuthorization //请求允许在前台获取用户位置的特权

那么现在我们开始使用着两个方法:

我们本此奖的项目 使我们上一次ios8之前的定位那个项目 我们只需要做稍微的改动即可:

1.首先将我们的部署版本切换到8.4

 

2.然后再我们的ViewController.m文件 的懒加载位置管理者中加上以下代码:

3.将模拟器切换到6

4.允许程序

我们点击屏幕 你会发现 什么都没做 没有弹出哪个框

那这个是什么原因呢? 

我们进入这个方法的头文件看看

看到这句话了吗?

这句话的意思是说如果你的info.plist文件中没有这样的key: NSLocationWhenInUseUsageDescription 那么这个方法什么也不会做

所以现在我们在info.plist文件中配置这样的key

配置好之后 我们再次允许程序看看

现在就可以了 我们点击allow

然后点击屏幕 ,你会发现控制台没有打印任何信息,这个问题是模拟器的问题 我们只需要将模拟器重启一下就可以了

重启模拟器方法如:

然后我们重新运行程序 你就会发现 可以了:

注意这个:requestWhenInUseAuthorization  方法默认情况下 波可以在后台获取位置 需要勾选后台模式

这个时候我们允许程序 将程序退到后台 看看效果

看到区别了吗? 会出现一个蓝色的条

以上是使用requestWhenInUseAuthorization  进行定位授权  接下来我们看看requestAlwaysAuthorization前后台授权

他跟requestWhenInUseAuthorization 的区别就是 不需要勾选后台模式 并且不会出现蓝色的条

同时他也需要在info.plist文件中配置如下的key :

我们配置下

我们简单修改下代码 将前后台授权打开:

然后我们运行程序:

发现退到后台依然可以定位

 

最后要提醒的就是以上两个方法 都是ios8.0的方法  所以如果你是运行在8.0之下的话会报方法找不到的错误,所以如果你要做适配的话

需要判断系统当前的版本号

到此位置 我们ios8.0之后的 就讲这么多了

 

posted @ 2015-09-11 12:46  勇敢的少年  阅读(251)  评论(0编辑  收藏  举报