zoukankan      html  css  js  c++  java
  • 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];
    }
  • 相关阅读:
    [LeetCode] 382. Linked List Random Node 链表随机节点
    [LeetCode] 384. Shuffle an Array 数组洗牌
    [LeetCode] 489. Robot Room Cleaner 扫地机器人
    [LeetCode] 465. Optimal Account Balancing 最优账户平衡
    [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
    百度地图Api进阶教程-创建标注和自定义标注3.html
    百度地图Api进阶教程-默认控件和自定义控件2.html
    百度地图Api进阶教程-基础地图示例1.html
    IS支持解析json
    C# 字典 Dictionary 遍历
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/10648997.html
Copyright © 2011-2022 走看看