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];
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM