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];
    }
  • 相关阅读:
    css3阴影效果
    应该了解的9种CSS技巧
    position
    MyEclipse设置Java代码注释模板
    Struts2 常用的常量配置
    CSS 中文字体对应英文和Unicode编码
    MyEclipse使用前优化与配置
    MyEclipse 快捷键收集
    Ajax 调用WebServices之一 基本应用
    C#控制台显示进度条
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/10648997.html
Copyright © 2011-2022 走看看