• 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];
    }
  • 相关阅读:
    repeater嵌套RadioButtonList赋值
    hive表导出到mysql报错
    hive创建表时报错
    linux————mysql————修改密码
    Spark入门:Spark运行架构(Python版)
    1、Spark简介(Python版)
    使用蒙特 ·卡罗方法计算圆周率近似值
    python运算符,内置函数简单使用
    numpy、pandas、scipy、matplotlib、jieba、 openpyxl、pillow的安装
    XML详解
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/10648997.html
Copyright © 2020-2023  润新知