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];
    }
  • 相关阅读:
    1-接口测试基础知识
    import os
    好用封装好的函数
    python下载代码
    cookie关系图,url编码(urllib.parse模块)
    import flask(make_response),urllib,requests,base64
    mock接口开发,excel(读,写,修改)
    import json,random,time,datetime,hashlib,redis,pymysql
    集合和函数
    python 文件读写
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/10648997.html
Copyright © 2011-2022 走看看