iOS获取定位权限/调用系统定位(Objective-C)

2018.3.10
demo下载地址 GitHub
demo是基于objective-c的纯代码实现,已剥离xib,关于xib的本地化实现,这里没有。

README
1.调用请求权限的方法之前,需要先在Info.plist文件中配置2个KV,特别是第一个Key,不可缺失.
Privacy - Location Always and When In Use Usage Description
Privacy - Location When In Use Usage Description
2.调用反地理编码会产生网络请求,需要网络权限.
3.若请求权限时,系统定位服务未开启,则需要添加一下应用进入前后台的监听方法(退到后台时添加回到前台的方法,
回到前台之后,移除监听对象),以在应用回到前台时判定发现定位服务已开启的情况下重新调用请求权限的方法.
4.如果需要后台持续定位,则需要先将Capabilities中的Background Modes中的Location Updates选项打开.
功能文件
可获取经纬度信息,以及利用(反地理编码api+系统自动网络请求)获取详细地理位置/城市信息。
RFLocationHelper.h
RFLocationHelper.h.m

调用方式
1.基本调用,示例代码:详见demo中的 ViewController.m 文件。

以下补充(一点翻译)内容转载自网友整理, 原文链接

补充(一点翻译)
属性:
desiredAccuracy:定位精度,是一个枚举类型
//kCLLocationAccuracyBest:最精确定位
//kCLLocationAccuracyNearestTenMeters:十米误差范围
//kCLLocationAccuracyHundredMeters:百米误差范围
//kCLLocationAccuracyKilometer:千米误差范围
//kCLLocationAccuracyThreeKilometers:三千米误差范围

方法:
//startUpdatingLocation:开始定位追踪
//stopUpdatingLocation : 停止定位追踪
//startUpdatingHeading:开始方向追踪
//stopUpdatingHeading:停止方向追踪
//startMonitoringForRegion : 开始对某个区域进行追踪
//stopMonitoringForRegion : 停止对某区域进行追踪 

代理方法:
- (void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations; 位置发生改变后执行
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading; 导航方向发生变化后执行
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;进入某个区域
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;走出某个区域之后执行

反地理编码相关:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    CLLocation *loctaion = [locations firstObject];
    NSLog(@"%f  %f",loctaion.coordinate.latitude,loctaion.coordinate.longitude );
    /*[geocoder reverseGeocodeLocation:loctaion completionHandler:^(NSArray *placemarks, NSError *error) {
     CLPlacemark *placemark=[placemarks firstObject];

     CLLocation *location=placemark.location;//位置
     CLRegion *region=placemark.region;//区域
     NSDictionary *addressDic= placemark.addressDictionary;//详细地址信息字典,包含以下部分信息
     //        CLPlacemark *placemark = [placemarks firstObject];
     //        placemark.addressDictionary
     NSString *name=placemark.name;//地名
     NSString *thoroughfare=placemark.thoroughfare;//街道
     NSString *subThoroughfare=placemark.subThoroughfare; //街道相关信息,例如门牌等
     NSString *locality=placemark.locality; // 城市
     NSString *subLocality=placemark.subLocality; // 城市相关信息,例如标志性建筑
     NSString *administrativeArea=placemark.administrativeArea; // 州
     NSString *subAdministrativeArea=placemark.subAdministrativeArea; //其他行政区域信息
     NSString *postalCode=placemark.postalCode; //邮编
     NSString *ISOcountryCode=placemark.ISOcountryCode; //国家编码
     NSString *country=placemark.country; //国家
     NSString *inlandWater=placemark.inlandWater; //水源、湖泊
     NSString *ocean=placemark.ocean; // 海洋
     NSArray *areasOfInterest=placemark.areasOfInterest; //关联的或利益相关的地标
     }];*/
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,944评论 1 180
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • 一.内存分配的几种策略: 1.静态的静态的存储区:内存在程序编译的时候就已经分配好,这块的内存在程序整个运行期间都...
    cookie口阅读 2,286评论 0 0
  • layeer阅读 1,605评论 0 2
  • 对于有些人来说,人的一生不过是在突破命运和顺其自然中博弈、切换。
    顺利如此阅读 2,361评论 0 0