zoukankan      html  css  js  c++  java
  • CLLocationManager 在ios8定位功能实现

    1 导入框架 CoreLocation.framework

    2 导入头文件 

    #import <CoreLocation/CoreLocation.h>

    3 遵守代理

    <CLLocationManagerDelegate>

    4 设置全局属性

    @property (strong, nonatomic) CLLocationManager* locationManager;

    5 viewdidload里面 

    [self startLocation];

     1 //开始定位
     2 -(void)startLocation
     3 {
     4     self.locationManager = [[CLLocationManager alloc] init];
     5     self.locationManager.delegate = self;
     6     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
     7     self.locationManager.distanceFilter = 10.0f;
     8     
     9     if ([[[UIDevice currentDevice] systemVersion] doubleValue] > 8.0)
    10     {
    11         //设置定位权限 仅ios8有意义
    12         // [self.locationManager requestWhenInUseAuthorization];// 前台定位
    13         
    14           [self.locationManager requestAlwaysAuthorization];// 前后台同时定位
    15     }
    16     [self.locationManager startUpdatingLocation];
    17 }

    6 info.plist增加字段,(ios8 必须要)一般无法弹出获取定位权限的alert的原因就在这

       NSLocationWhenInUseUsageDescription   //允许在前台获取GPS的描述
       NSLocationAlwaysUsageDescription   //允许在前、后台获取GPS的描述 

    此处设置必须和第5步的定位权限对应上,如果是前台定位,就在plist里面NSLocationWhenInUseUsageDescription

    并不是 俩项都必须要加

    效果图:

    7 定位成功后的代理方法

     1 //定位代理经纬度回调
     2 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
     3     
     4     [self.locationManager stopUpdatingLocation];
     5     //    NSLog(@"location ok");
     6     //
     7     //    NSLog(@"%@",[NSString stringWithFormat:@"经度:%3.5f
    纬度:%3.5f",newLocation.coordinate.latitude,newLocation.coordinate.longitude]);
     8     
     9     CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
    10     [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
    11         for (CLPlacemark * placemark in placemarks) {
    12             
    13             NSDictionary *test = [placemark addressDictionary];
    14             //  Country(国家)  State(城市)  SubLocality(区)
    15             self.title = [test objectForKey:@"City"];
    16         }
    17     }];
    18     
    19 }

    定位失败的回调:

     1 /**
     2  *  1 定位失败的回调
     3  *  2 或者是用户点击了不允许定位的时候
     4  */
     5 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
     6 {
     7     if ([error code] == kCLErrorDenied)
     8     {
     9         //访问被拒绝
    10     }
    11     if ([error code] == kCLErrorLocationUnknown) {
    12         //无法获取位置信息
    13     }
    14 }
  • 相关阅读:
    LeetCode——Add Binary
    UVA
    mac平台adb、tcpdump捕手android移动网络数据包
    代码农民提高生产力
    Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php
    Arc Object开发,概述2
    ArcGIS Object开发,概述
    GDI 编程基础简介
    科目三考试档位与速度匹配总结、及考试操作技巧
    倾斜摄影
  • 原文地址:https://www.cnblogs.com/txios/p/4390059.html
Copyright © 2011-2022 走看看