iOS地图 -- 定位初使用
- iOS的定位服务用到的框架是
#import <CoreLocation/CoreLocation.h>
- 定位中用到的类是
CLLocationManager
一.iOS8.0之前的定位
- 向用户描述授权的信息需要在info.plist中配以下key
- 后台情况下开启定位服务需要进行如下图配置
二.iOS8.0之后的定位(包含iOS8.0)
- iOS8.0之后前台定位授权和后台定位授权需要调用下面对应的方法
// 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键
[_mgr requestWhenInUseAuthorization];
或者
// 前后台定位授权 官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键
[_mgr requestAlwaysAuthorization];
三.版本不同的适配问题(两种方法)
- 方法一:
// 方法一:判断iOS版本号if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {// 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键[_mgr requestWhenInUseAuthorization];// 前后台定位授权 官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键[_mgr requestAlwaysAuthorization];}
- 方法二:高大上的方法
// 方法二:判断位置管理者能否响应iOS8之后的授权方法if ([_mgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {// // 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键
// [_mgr requestWhenInUseAuthorization];// 前后台定位授权 官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键[_mgr requestAlwaysAuthorization];}
三.其余细节问题
- 位置管理者的精确度
/**kCLLocationAccuracyBestForNavigation; --> 最适合导航kCLLocationAccuracyBest; --> 最好的kCLLocationAccuracyNearestTenMeters; --> 附近10米kCLLocationAccuracyHundredMeters; --> 100米kCLLocationAccuracyKilometer; --> 1000米kCLLocationAccuracyThreeKilometers; --> 3000米*/// 设置定位所需的精度 枚举值 精确度越高越耗电self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
- 位置管理者的过滤器,没移动制定的距离定位一次
// 每100米更新一次定位self.mgr.distanceFilter = 100;
四.代理方法中获取定位到的位置信息,这里先不细讲,下一次笔记详细说明
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{NSLog(@"已经定位");
}
五.代理方法中监听授权状态的改变
// 代理方法中监听授权的改变,被拒绝有两种情况,一是真正被拒绝,二是服务关闭了
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{switch (status) {case kCLAuthorizationStatusNotDetermined:{NSLog(@"用户未决定");break;}// 系统预留字段,暂时还没用到case kCLAuthorizationStatusRestricted:{NSLog(@"受限制");break;}case kCLAuthorizationStatusDenied:{// 被拒绝有两种情况 1.设备不支持定位服务 2.定位服务被关闭if ([CLLocationManager locationServicesEnabled]) {NSLog(@"真正被拒绝");// 跳转到设置界面NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];}}else {NSLog(@"没有开启此功能");}break;}case kCLAuthorizationStatusAuthorizedAlways:{NSLog(@"前后台定位授权");break;}case kCLAuthorizationStatusAuthorizedWhenInUse:{NSLog(@"前台定位授权");break;}default:break;}
}
六.练习详细代码
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>@interface ViewController ()<CLLocationManagerDelegate>
/** 位置管理者 */
@property(nonatomic,strong) CLLocationManager *mgr;
@end@implementation ViewController#pragma mark - 懒加载
- (CLLocationManager *)mgr
{if (_mgr == nil) {// 实例化位置管理者_mgr = [[CLLocationManager alloc] init];// 指定代理,代理中获取位置数据_mgr.delegate = self;// 兼容iOS8之后的方法// 方法一:判断iOS版本号if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {// 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键[_mgr requestWhenInUseAuthorization];// 前后台定位授权 官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键[_mgr requestAlwaysAuthorization];}// 方法二:判断位置管理者能否响应iOS8之后的授权方法if ([_mgr respondsToSelector:@selector(requestAlwaysAuthorization)]) {// // 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键
// [_mgr requestWhenInUseAuthorization];// 前后台定位授权 官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键[_mgr requestAlwaysAuthorization];}}return _mgr;
}- (void)viewDidLoad {[super viewDidLoad];// 开启位置更新[self.mgr startUpdatingLocation];/**kCLLocationAccuracyBestForNavigation; --> 最适合导航kCLLocationAccuracyBest; --> 最好的kCLLocationAccuracyNearestTenMeters; --> 附近10米kCLLocationAccuracyHundredMeters; --> 100米kCLLocationAccuracyKilometer; --> 1000米kCLLocationAccuracyThreeKilometers; --> 3000米*/// 设置定位所需的精度 枚举值 精确度越高越耗电self.mgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;// 每100米更新一次定位self.mgr.distanceFilter = 100;
}#pragma mark - CLLocationManagerDelegate- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{NSLog(@"已经定位");
}// 代理方法中监听授权的改变,被拒绝有两种情况,一是真正被拒绝,二是服务关闭了
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{switch (status) {case kCLAuthorizationStatusNotDetermined:{NSLog(@"用户未决定");break;}// 系统预留字段,暂时还没用到case kCLAuthorizationStatusRestricted:{NSLog(@"受限制");break;}case kCLAuthorizationStatusDenied:{// 被拒绝有两种情况 1.设备不支持定位服务 2.定位服务被关闭if ([CLLocationManager locationServicesEnabled]) {NSLog(@"真正被拒绝");// 跳转到设置界面NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];}}else {NSLog(@"没有开启此功能");}break;}case kCLAuthorizationStatusAuthorizedAlways:{NSLog(@"前后台定位授权");break;}case kCLAuthorizationStatusAuthorizedWhenInUse:{NSLog(@"前台定位授权");break;}default:break;}
}@end
转载于:https://www.cnblogs.com/gchlcc/p/5843531.html
iOS地图 -- 定位初使用相关推荐
- iOS地图定位(Map)
1.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 手机软件:微信摇一摇.QQ附近的人. ...
- iOS地图定位小功能(上)
讲到iOS的定位呢,首先先介绍一下定位这东西.iOS系统自带的定位服务可以实现很多需求.比如:获取当前经纬度,获取当前位置信息等等. 一.介绍 1.定位 使用CoreLocation框架 2. ...
- iOS地图定位导航与大头针的简单使用
定位 1.一次定位 1.创建位置管理器 // 这里创建的管理其对象如果没有强引用,就会造成你后面的操作不会出现效果,全局变量强引用.CLLocationManager *manager = [[CLL ...
- iOS 地图定位 地图
地图 准备工作 导入MapKit框架(iOS5之后不在需要程序员自己导入) 导入主头文件**#import <MapKit/MapKit.h>** MapKit框架中所有的数据类型的前缀都 ...
- 类似美团的iOS地图定位及调用苹果系统导航
引入头文件 #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> #import "MapV ...
- iOS 地图定位 定位
定位 常用方法的介绍 CLLocationManager位置管理器,我们的有关于位置的方法和属性都是通过它来管理设置的. + (BOOL)locationServicesEnabled监测设备是否开启 ...
- iOS中定位以及地图的使用
1.定位技术: 1.1 基站定位技术 根据移动通信信号,获取基站ID,查询苹果服务器或手机预置的基站信息计算出定位信息,速度快,但由于信号辐射范围大,误差几百上千米,使用三角定位 1.2 WiFi定位 ...
- iOS关于地图定位基础(一)
若看完这篇的朋友,可以查看我的下一篇iOS关于地图定位基础(二) 随着更多的LBS(Location Based Service)业务被集成到手机应用 同时鉴于在iOS中地图的学习是看了又忘, ...
- iOS关于地图定位基础(二)
在前一篇文章 iOS关于地图定位基础(一) 中我们主要总结了 iOS 里面利用原生 CoreLocation 框架实现基本定位功能和一些注意点,侧重点主要是iOS8+之后的定位授权与授权状态的使用.接 ...
- iOS使用百度地图定位,关掉系统定位服务该怎么提示用户打开
首先关于这个问题,我真的纠结了很久很久,因为我们的项目请求一些数据的时候需要给后台上传用户的经纬度,然而用户小白并不知道,所以本妹子就是说如果用户关掉了定位服务或者是没有允许我们的项目使用定位服务这个 ...
最新文章
- 大厂技术文档:Redis+Nginx+Spring全家桶+Dubbo精选
- 从Windows Server 2003升级到2008
- JDK和cglib生成代理类
- 表达式封装和模型驱动封装的区别
- 做网页前端遇到的一些问题
- 时序列数据库武斗大会之 OpenTSDB 篇
- 苦了我一年的选择,现在却是我最回味的时光
- qml入门学习(七):单独文件自定义组件
- security工作笔记006---oauth2(spring security)报错method_not_allowed(Request method 'GET' not supported)解决
- 鸿蒙撕系统裂安卓阵营,鸿蒙系统年底问世 安卓阵营是不是该瑟瑟发抖了
- HTML5 响应式网页设计之页面美化(一.响应式布局)
- java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
- 推荐汪峰的《北京,北京》,虽然有些念头
- php redis 定时任务,利用redis实现定时任务,完全不需要crontab
- 汇编程序编译连接过程
- 福昕PDF阅读器 Foxit PDF Reader 中文绿色版
- 《炬丰科技-半导体工艺》--技术资料合集14
- python中backward是什么意思_python-PyTorch函数中的下划线后缀是什么意思...
- 计数器集成芯片+分析时序逻辑电路
- Tensorflow2.0 实现 YOLOv3(二):网络结构(common.py + backbone.py)