iOS-应用进入后台执行定位 保证进程不被系统kill(定位方法)

在AppDelegate里面进行如下操作:

导入MapKit

#import <MapKit/MapKit.h>

构建对象和代理:

@interface AppDelegate ()<CLLocationManagerDelegate>

@property (nonatomic, strong) CLLocationManager *manager;

@end

实现函数:

/**
 应用进入后台执行定位 保证进程不被系统kill
 */
-(void)rjxContinuedLocationManager
{
    //1.创建定位管理对象
    _manager = [[CLLocationManager alloc]init];
    
    //2.设置属性 distanceFilter、desiredAccuracy
    [_manager setDistanceFilter:kCLDistanceFilterNone];//实时更新定位位置
    [_manager setDesiredAccuracy:kCLLocationAccuracyBest];//定位精确度
    if([_manager respondsToSelector:@selector(requestAlwaysAuthorization)]){
        [_manager requestAlwaysAuthorization];
    }
    //该模式是抵抗程序在后台被杀,申明不能够被暂停
    _manager.pausesLocationUpdatesAutomatically = NO;
    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
        //在后台也可定位
        [_manager requestAlwaysAuthorization];
    }
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
        _manager.allowsBackgroundLocationUpdates = YES;
    }
    //3.设置代理
    _manager.delegate = self;
    //4.开始定位
    [_manager startUpdatingLocation];
    //5.获取朝向
    [_manager startUpdatingHeading];
}

// 当你的程序将要被挂起,会调用改方法
- (void)applicationWillResignActive:(UIApplication *)application {
    /** 应用进入后台执行定位 保证进程不被系统kill */
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self.manager startUpdatingLocation];
}

/** 应用进入后台执行定位 保证进程不被系统kill */
- (void)applicationDidEnterBackground:(UIApplication *)application {
    UIApplication *app = [UIApplication sharedApplication];
    __block  UIBackgroundTaskIdentifier bgTask;
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            
            if (bgTask != UIBackgroundTaskInvalid){
                bgTask = UIBackgroundTaskInvalid;
            }
        });
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (bgTask != UIBackgroundTaskInvalid){
                bgTask = UIBackgroundTaskInvalid;
            }
        });
    });
    
    [self.manager startUpdatingLocation];
}

 

posted on 2019-04-03 15:13  麦芽呀~  阅读(1805)  评论(0编辑  收藏  举报