iOS后台持续定位实现方法

作者: CGPointZero | 来源:发表于2015-11-27 10:37 被阅读5019次

    1.选中target-->Gapability,打开Background Modes模式,并勾选Location updates

    设置

    2.代码如下:

    ViewController.h
    <pre>#import <UIKit/UIKit.h>

    import <CoreLocation/CoreLocation.h>

    @interface ViewController : UIViewController<CLLocationManagerDelegate>

    //定位管理对象
    @property(nonatomic,strong)CLLocationManager *manager;

    @end</pre>
    ViewController.m
    <pre>#import "ViewController.h"

    @interface ViewController ()
    {
    CLGeocoder *_coder;
    //存储上一次的位置
    }
    @end

    @implementation ViewController

    • (void)viewDidLoad
      {
      [super viewDidLoad];
      self.view.backgroundColor=[UIColor whiteColor];
      //1.创建定位管理对象
      _manager=[[CLLocationManager alloc]init];
      _coder=[[CLGeocoder alloc]init];
      //2.设置属性 distanceFilter、desiredAccuracy
      _manager.distanceFilter=kCLDistanceFilterNone;//实时更新定位位置
      _manager.desiredAccuracy=kCLLocationAccuracyBest;//定位精确度

      if([_manager respondsToSelector:@selector(requestAlwaysAuthorization)])
      {
      [_manager requestAlwaysAuthorization];
      }
      //该模式是抵抗程序在后台被杀,申明不能够被暂停
      _manager.pausesLocationUpdatesAutomatically=NO;
      //3.设置代理
      _manager.delegate=self;
      //4.开始定位
      [_manager startUpdatingLocation];
      //5.获取朝向
      [_manager startUpdatingHeading];

    }

    pragma mark-CLLocationManager代理方法

    //定位失败时调用的方法
    -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
    NSLog(@"%@",error);
    }
    //定位成功调用的的方法
    -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
    if(locations.count>0)
    {
    // 获取位置信息
    CLLocation *loc=[locations lastObject];
    // 获取经纬度的结构体
    CLLocationCoordinate2D coor=loc.coordinate;

        CLLocation *location=[[CLLocation alloc]initWithLatitude:coor.latitude longitude:coor.longitude];
        
        [_coder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
            CLPlacemark *pmark=[placemarks firstObject];
            NSLog(@"%@",pmark.addressDictionary);
            NSString *city=pmark.addressDictionary[@"City"];
            if([city hasSuffix:@"市辖区"])
                city=[city substringToIndex:city.length-3];
            if([city hasSuffix:@"市"])
                city=[city substringToIndex:city.length-1];
            NSLog(@"%@",city);
        }];
    }
    

    }
    @end</pre>
    Appdelegate.m
    <pre>#import "AppDelegate.h"

    import <CoreLocation/CoreLocation.h>

    import "ViewController.h"

    @interface AppDelegate ()

    @end

    @implementation AppDelegate

    • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      self.window.rootViewController=[ViewController new];
      return YES;
      }

    • (void)applicationDidEnterBackground:(UIApplication )application {
      if([CLLocationManager significantLocationChangeMonitoringAvailable])
      {
      ViewController
      vc=(ViewController *)self.window.rootViewController;
      [vc.manager stopUpdatingLocation];
      [vc.manager startMonitoringSignificantLocationChanges];
      }
      else
      {
      NSLog(@"significant Location Change not Available");
      }
      }

    • (void)applicationDidBecomeActive:(UIApplication )application {
      if([CLLocationManager significantLocationChangeMonitoringAvailable])
      {
      ViewController
      vc=(ViewController *)self.window.rootViewController;
      [vc.manager stopMonitoringSignificantLocationChanges];
      [vc.manager startUpdatingLocation];
      }
      else
      {
      NSLog(@"significant Location Change not Available");
      }
      }

    @end</pre>

    相关文章

      网友评论

      • 梁森的简书:后台定位和持续定位又区别吧?
      • leftwater:没有持续定位 - 10.0 不能持续后台 和 被kill掉后,不能定位
      • 彭小先生:没有持续定位啊
      • 菠萝蜜菠萝炒饭: :relaxed: 一般后台定位会被拒的,你是怎么解决的
      • 84a013fc045a:- (void)applicationDidEnterBackground:(UIApplication )application {}
        - (void)applicationDidBecomeActive:(UIApplication )application {}
        想问一下你这里方法有什么作用吗。。我没有加好像也没有什么影响,
        一只失去梦想的程序猿:这应该是切换坐标采集方式吧?
        CGPointZero:@84a013fc045a 程序重新得到焦点
      • 流年_橙子:这种定位方式在后台运行一段时间就不运行了吧

      本文标题:iOS后台持续定位实现方法

      本文链接:https://www.haomeiwen.com/subject/uxudhttx.html