(七十五)CoreLocation(一)在iOS7和iOS8设备上获取授权

苹果在iOS8上更新了CoreLocation的授权获取方式,在原来的基础上,不仅需要调用授权函数,还需要对info.plist进行相应的配置。

在iOS上获取经纬度使用的是CoreLocationManager,它来自CoreLocation.framework框架,使用时应当包含框架的总头文件:

#import <CoreLocation/CoreLocation.h>

一般是先创建管理者,然后成为其代理,对于iOS7,直接调用startUpdatingLocation即可开始监听,而对于iOS8,还需要调用一个方法进行授权,根据使用状况的不同,有两种授权,分别是使用时获取位置和持续获取位置,根据需要的不同进行调用:

[self.manager requestAlwaysAuthorization];
[self.manager requestWhenInUseAuthorization];

一般直接获取第一个即可,应用面更广。

除此之外,在info.plist中加入两个键,值为string,string中的内容就是请求授权时显示的说明:

对应于两种授权,有NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription两个键。

在每次开启应用时,会调用一个代理方法来判断授权状态:通过这个方法判断是否授权成功,如果成功则调用startUpdatingLocation来开始定位。

// 授权状态发生改变时调用
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
    /*
    typedef NS_ENUM(int, CLAuthorizationStatus) {
        // User has not yet made a choice with regards to this application
        kCLAuthorizationStatusNotDetermined = 0,

        // This application is not authorized to use location services.  Due
        // to active restrictions on location services, the user cannot change
        // this status, and may not have personally denied authorization
        kCLAuthorizationStatusRestricted,

        // User has explicitly denied authorization for this application, or
        // location services are disabled in Settings.
        kCLAuthorizationStatusDenied,

        // User has granted authorization to use their location at any time,
        // including monitoring for regions, visits, or significant location changes.
        kCLAuthorizationStatusAuthorizedAlways NS_ENUM_AVAILABLE(NA, 8_0),

        // User has granted authorization to use their location only when your app
        // is visible to them (it will be made visible to them if you continue to
        // receive location updates while in the background).  Authorization to use
        // launch APIs has not been granted.
        kCLAuthorizationStatusAuthorizedWhenInUse NS_ENUM_AVAILABLE(NA, 8_0),

        // This value is deprecated, but was equivalent to the new -Always value.
        kCLAuthorizationStatusAuthorized NS_ENUM_DEPRECATED(10_6, NA, 2_0, 8_0, "Use kCLAuthorizationStatusAuthorizedAlways") = kCLAuthorizationStatusAuthorizedAlways
    };*/

    switch (status) {
        case kCLAuthorizationStatusAuthorizedAlways:
            NSLog(@"持续使用授权");
            [self.manager startUpdatingLocation];
            break;
        case kCLAuthorizationStatusAuthorizedWhenInUse:
            NSLog(@"使用中授权");
            [self.manager startUpdatingLocation];
            break;
        case kCLAuthorizationStatusDenied:
            NSLog(@"授权被拒绝");
            break;
        case kCLAuthorizationStatusNotDetermined:
            NSLog(@"等待用户授权");
            break;
        default:
            break;
    }

}

因为iOS7直接开始获取位置即可,因此应当对两种系统区分对待,用UIDevice获取到系统版本,针对不同的系统进行不同的处理,如果是iOS8以前的系统,直接开始获取位置:

- (void)viewDidLoad {

    [super viewDidLoad];

    // 1.创建CoreLocationManager
    CLLocationManager *manager = [[CLLocationManager alloc] init];
    self.manager = manager;
    // 2.成为其代理
    self.manager.delegate = self;

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        [self.manager requestAlwaysAuthorization];
    }else{
        // iOS8以前直接开始定位
        [self.manager startUpdatingLocation];
    }

}

要判断是否成功的开始定位,实现代理方法locationManager:didUpdateLocations:来观察。

有关经纬度、方向、区域判断等请见下节。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-23 22:49:23

(七十五)CoreLocation(一)在iOS7和iOS8设备上获取授权的相关文章

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台-创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课程机构APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime import datetim

“全栈2019”Java第七十五章:内部类持有外部类对象

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第七十五章:内部类持有外部类对象 下一章 "全栈2019"Java第七十六章:静态.非静态内部类访问权限 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习

第七十五节,CSS表格与列表

CSS表格与列表 学习要点: 1.表格样式 2.列表样式 3.其他功能 一.表格样式 表格有五种独有样式,样式表如下:             属性               值                   说明              CSS版本       border-collapse        边框样式    相邻单元格的边框样式                         2        border-spacing       长度值        相邻单元格边

Linux学习总结(七十五)非关系型数据库之memcached

一 非关系型数据库 非关系型数据库就是NoSQL,关系型数据库代表MySQL对于关系型数据库来说,是需要把数据存储到库.表.行.字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗费时间和资源,尤其是数据是需要从磁盘里去检索NoSQL数据库存储原理非常简单(典型的数据类型为k-v),不存在繁杂的关系链,比如mysql查询的时候,需要找到对应的库.表(通常是多个表)以及字段.NoSQL数据可以存储在内存里,查询速度非常快NoSQL在性能表现上虽然能优于关系型数据库,但是它并不能完全替

第七十五天上课 php注册登入审核和文件上传

文件上传 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件上传</title> <?php if(!(empty($_FILES['file']) || empty($_POST['submit']))) { $urls="./my-img/".$_FILES['file']['name']; /

第一百七十五节,jQuery,工具函数

jQuery,工具函数 学习要点: 1.字符串操作 2.数组和对象操作 3.测试操作 4.URL 操作 5.浏览器检测 6.其他操作 工具函数是指直接依附于 jQuery 对象,针对 jQuery 对象本身定义的方法,即全局性 的函数.它的作用主要是提供比如字符串.数组.对象等操作方面的遍历. 一.字符串操作 在 jQuery 中,字符串的工具函数只有一个,就是去除字符串左右空格的工具函数: trim()去掉字符串两边空格 var str = ' jQuery '; alert(str); al

第五百七十五、六天 how can I 坚持

昨天下班竟然去吃火锅了,其他好像也没啥了. 今天自己在家待了一天,也没学多少东西,自律性太差了. 我思我想我坚持,思是思考,想是冥想,最怕坚持,因为坚持总能成功.本想注册个微博,竟然让手机自己发短息,微博也真是够扣的.还是注册下吧. 晚上出去买了点猪头肉,吃着都恶心,以后再也不吃猪头肉了. 明天买点肉,自己蒸粉蒸吃,哈哈.这生活. 准备睡觉了,再看会书.学习切莫急,急伤神,心意乱.

上班的第四百七十五天

今天有点偷懒,因为我纠结了,究竟是继续研究数据库呢,还是解那个无解的bug呢?最后两样都没有完成,搞得心慌慌的,果然一心真的不能二用. 还好,还是能够学到点东西的,就是服务器的第3个模块,子系统模块.加上之前弄清楚了资源管理器.通信模块,基本上服务器的逻辑框架我就掌握了.用了6天,理清了服务器框架,lua入门了,MySql也入门了,学会了使用VS2010开发软件以及用Sqlyog访问数据库,有基础学东西就是容易上手. 接下来要进一步规划学习内容了. 首先,我的任务肯定会多起来,而且肯定是逻辑业务

第二百七十五节,MySQL数据库安装和介绍

MySQL数据库安装 一.概述 1.什么是数据库 ? 答:数据的仓库,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 答:他们均是一种软件,都有两个主要的功能: a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDB