地图之CLLocationManager的使用 定位功能使用
1.iOS8曾经使用CLLocationManager
- 1.导入头文件
<CoreLocation/CoreLocation.h>
- 2.创建位置管理者
CLLocationManager
, 并加入到属性。 - 3.设置代理、遵守协议、实现代理方法,在代理方法中获取位置信息
- 4.调用開始更新位置方法
5.设置
每隔多远定位一次
和准确度
。准确度越高越耗电,定位时间越长// 1.设置位置管理者属性 @property (nonatomic, strong) CLLocationManager *lcManager; // 2.推断是否打开了位置服务 if ([CLLocationManager locationServicesEnabled]) {// 创建位置管理者对象self.lcManager = [[CLLocationManager alloc] init];self.lcManager.delegate = self; // 设置代理// 设置定位距离过滤參数 (当本次定位和上次定位之间的距离大于或等于这个值时,调用代理方法)self.lcManager.distanceFilter = 100;self.lcManager.desiredAccuracy = kCLLocationAccuracyBest; // 设置定位精度(精度越高越耗电)[self.lcManager startUpdatingLocation]; // 開始更新位置 } /** 获取到新的位置信息时调用*/ -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {NSLog(@"定位到了"); } /** 不能获取位置信息时调用*/ -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {NSLog(@"获取定位失败"); }
- 6.请求授权,iOS6之后,苹果開始加强保护用户隐私,在
Info.plist
文件里定义Key
提醒用户,提高用户同意定位的概率。Info.plist 设置Key - 7.假设要后台定位。须要打开后台模式
勾选后台模式
2.iOS8.0之后使用CLLocationManager
- 1.iOS8之后,苹果又进一步加强了隐私保护。不会主动填出对话框。让用户选择
- 2.须要实现两个方法(实现其一就可以),而且
Info.plist
中设置相应的key
,才会弹框
1.requestWhenInUseAuthorization
- 1.当程序当前的授权状态为未决定时,在前台时请求定位服务许可时使用。须要先在 Info.plist 文件里设置一个Key:
NSLocationWhenInUseUsageDescription
, 假设不设置key。系统会忽略定位请求。Info.plist 设置相应的Key 2.当用户授权
when-in-use
时,程序在前台时能够启动大部分定位服务。假设想要后台定位,须要开启后台定位模式。但在状态栏会出现蓝条提示用户程序正在进行定位。[_lcManager requestWhenInUseAuthorization];
请求定位的弹框
2.requestAlwaysAuthorization
- 1.请求前后台定位服务授权,当授权状态为未决定时请求用户授权。前提是在
Info.plist
文件里包括keyNSLocationAlwaysUsageDescription
3.注意
- 1.iOS8之后,假设想要定位。必须调用
requestWhenInUseAuthorization
或requestAlwaysAuthorization
方法。 - 2.假设两个请求授权的方法都运行了,会出现下面情况
- 1.
when-in-use
写在前面,第一次打开程序时请求授权,假设勾选了后台模式,进入后台会出现蓝条提示正在定位。当程序退出,第二次打开程序时Always
会再次请求授权。之后进入后台就不会出现蓝条了(前后台都能定位)。 - 2.
Always
写在前面,when-in-use
写在后面。仅仅会在第一次打开程序时请求授权,由于Always
得到的授权大于when-in-use
的到的授权
- 1.
4.推断是否开启了定位服务
- 在启动更新位置之前要先推断是否开启了定位服务
if ([CLLocationManager locationServicesEnabled]) { // 推断是否打开了位置服务[self.lcManager startUpdatingLocation]; // 開始更新位置}
5.适配版本的方法
when-in-use
和Always
都是iOS8之后出现的方法。假设不进行版本号适配,执行在iOS7上就会crash,此时须要做版本号号推断- 1.推断版本号号
if ([[UIDevice currentDevice].systemVersion floatValue] >=8.0 ) { [_lcManager requestAlwaysAuthorization]; }
- 2.适配版本号的还有一种方法
if ([_lcManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {[_lcManager requestWhenInUseAuthorization];}
6.监听定位服务状态的改变
- 实现代理方法。推断定位服务的状态
/** 定位服务状态改变时调用*/ -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {switch (status) {case kCLAuthorizationStatusNotDetermined:{NSLog(@"用户还未决定授权");break;}case kCLAuthorizationStatusRestricted:{NSLog(@"訪问受限");break;}case kCLAuthorizationStatusDenied:{// 类方法,推断是否开启定位服务if ([CLLocationManager locationServicesEnabled]) {NSLog(@"定位服务开启,被拒绝");} else {NSLog(@"定位服务关闭,不可用");}break;}case kCLAuthorizationStatusAuthorizedAlways:{NSLog(@"获得前后台授权");break;}case kCLAuthorizationStatusAuthorizedWhenInUse:{NSLog(@"获得前台授权");break;}default:break;} }
7.代理方法返回的 locations
信息
- 当位置管理器。获取到位置后,调用
locationManager:didUpdateLocations:
方法,返回的类型为CLLocation
的位置信息数组,下面为数组包括的属性- 1.coordinate : 当前位置的坐标
- latitude : 纬度
- longitude : 经度
- 2.altitude : 海拔。高度
- 3.horizontalAccuracy : 纬度和经度的精度
- 4.verticalAccuracy : 垂直精度(获取不到海拔时为负数)
- 5.course : 行进方向(真北)
- 6.speed : 以米/秒为单位的速度
- 7.description : 位置描写叙述信息
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *location = [locations firstObject]; NSLog(@"%@", location); }
- 1.coordinate : 当前位置的坐标
3.iOS9.0之后使用CLLocationManager
- 1.iOS9.0之后有一种新的请求定位的方法
requestLocation
- 2.作用:依照定位准确度从低到高进行排序,逐个进行定位。
假设获取到的位置不是准确度最高的那个,也会在定位超时后。通过代理告诉外界。
- 3.注意:
- 1.必须实现
ocationManager:didUpdateLocations:
和locationManager:didFailWithError
方法,可是仅仅调用一次 - 2.不能与
startUpdatingLocation
同一时候使用if ([CLLocationManager locationServicesEnabled]) { // 推断是否打开了位置服务[self.lcManager requestLocation]; }
- 1.必须实现
4.实现
requestWhenInUseAuthorization
或requestAlwaysAuthorization
方法,并设置相应的 keyif ([[UIDevice currentDevice].systemVersion floatValue] >=8.0 ) {// iOS0.0:假设当前的授权状态是使用是授权,那么App退到后台后。将不能获取用户位置,即使勾选后台模式:location[_lcManager requestWhenInUseAuthorization];}
5.必须勾选后台模式,并设置
allowsBackgroundLocationUpdates
属性为YES(默认是NO)- 1.当定位完毕时。设置为NO,而且不再定位跟踪
2.使用
-responsdToSelector:
推断// iOS9.0+ 要想继续获取位置。须要使用下面属性进行设置(注意勾选后台模式:location)但会出现蓝条 if ([_lcManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) { _lcManager.allowsBackgroundLocationUpdates = YES; }
if ([CLLocationManager locationServicesEnabled]) {
switch ([CLLocationManager authorizationStatus]) {
case kCLAuthorizationStatusNotDetermined:
case kCLAuthorizationStatusRestricted:{
[[NWLocationManager sharedInstance].locationManager requestWhenInUseAuthorization];//IOS8以后必需要调用此方法才干够定位
}
break;
case kCLAuthorizationStatusDenied:{
[[SCLocationManager sharedInstance] showSettingAlertView];
}
break;
case kCLAuthorizationStatusAuthorizedAlways:
case kCLAuthorizationStatusAuthorizedWhenInUse:{
}
default:
break;
}
[[NWLocationManager sharedInstance].locationManager startUpdatingLocation];//開始定位
}else{
NWLog(@"Alert: 定位服务不可用");
}
地图之CLLocationManager的使用 定位功能使用相关推荐
- Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...
- 百度地图开发者平台普通IP定位功能详解
前端时间业务需求,进而去了解IP定位的功能,一开始使用的免费API接口,但是几天时间接口就访问失效,了解到百度地图也有IP定位功能,所以记录使用的过程. 一.注册百度地图开发者,并创建应用 在创建应用 ...
- 腾讯地图发送定位-打开定位功能
用到的是腾讯地图API,主要的功能: 1.选择地址发送(地图选址组件 https://lbs.qq.com/tool/component-picker.html) 2.实时地址静态图(https:// ...
- ionic 添加地图定位功能
由于项目需求,需要一个定位功能,通过google或百度,搜到一个cordova-plugin-geolocation的插件,在ios上可以用,但是在android就呵呵了,原因就不说了,大家都知道.所 ...
- 使用百度地图实现基本的地图显示与定位功能
最近在项目中用到了地图显示与定位功能,那么毫无疑问首选百度地图,关于百度地图的基本使用在其官网介绍的十分详细,而且还附带程序Demo代码供大家参考.链接:点击打开链接.注意在自己的项目中使用百度地图需 ...
- 基于百度地图实现Android定位功能实现(详解+教程)
基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...
- Android利用百度地图API实现定位功能(记录)
本篇主要介绍一下如何使用百度地图API来实现定位以及地图的基本使用. 效果图如下: 步骤如下: 一.申请APIKey. (1)注册百度账号并申请开发者资质:http://developer.baidu ...
- iOS获取高德地图实现持续定位功能
首先,根据高德地图开发平台在Xcode里面配置相应的环境 自动部署用cocoapods,请按照http://lbs.amap.com/api/ios-location-sdk/guide/create ...
- 007:Mapbox GL实现地图地点搜索定位功能
第007个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中实现地图地点搜索定位功能 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果 配 ...
最新文章
- 欢迎参加2022年第一次《城市大脑建设标准规范》专家研讨会
- Python基本语法_强制数据类型转换
- iframe的应用 实现无刷新用户注册
- Thinkphp修改一句代码,使得foreach标签支持对象,增加变量[数组对象]混合解析法!...
- python多重继承_Python多重继承
- 电商后台设计-组织架构(三)
- 企业之pacemaker基本概念及其原理
- Lavas 安装和项目构建
- php计算ip掩码,php进行ip地址掩码运算处理的方法
- 网络安全知识竞赛(国家信息安全水平考试NISP)模拟题1
- 高精度文字识别工具,图片转文字工具免费版,ocr
- vue cli 脚手架 重新安装步骤
- 用友U9sv服务打开时报错内存入口检查失败,因为可用内存(371662848 字节)少于总内存的 5%
- hive-对用户浏览网站的点击量按年月进行统计
- configure 中常见的几个命令
- Mysql死锁问题,详细分析
- vue+element-ui 动态加载本地图片
- Linux学习笔记(十八) -- 运行程序,出现Failed to load module canberra-gtk-module错误的解决方案
- C# Invoke,begininvoke的用法详解
- golang gorilla websocket例子
热门文章
- android错误整理——模拟器无法连接网络
- MF训练套件(1):如何去除应用标题?
- php-redis客户端使用方法
- 企业分布式微服务云SpringCloud SpringBoot mybatis (十一)docker部署spring cloud项目
- 牛客练习赛39 B:选点(二叉树遍历+LIS)
- 进击的 JavaScript 之(七) 原型链
- Activity返回数据给上一个活动
- 读《实战 GUI 产品的自动化测试》之:第二步,构建利于维护的自动化测试系统...
- Wijmo 更优美的jQuery UI部件集:运行时处理Wijmo GridView数据操作
- Android多媒体之GLES2战记第四集--移形换影