美文网首页
iOS 后台持续定位

iOS 后台持续定位

作者: 青年别来无恙 | 来源:发表于2019-05-15 17:58 被阅读0次

前言

前文讲到程序推到后台的运行情况iOS 对APP推到后台运行时长的探究,主要还是想做个后台定位,希望APP在按下home键退到后台时持续获取位置信息。

实现方案

本文根据位置权限做了两种状态的定位效果。
1、使用应用期间
2、始终
3、永不(就是不开启定位权限这个不用讨论)

一、使用应用期间

用户选择了使用应用期间,表明程序在前台工作时可以正常获取定位信息。一但推到后台则可能获取不到(为什么说可能:因为持续定位可以一直获取)。但是在后台一旦关闭了定位,就在后台重新开启了,以为程序处于后台获取不到定位权限!!!
处于后台:选择使用应用期间的权限需要一直保持定位状态,才可以持续获取用户位置信息,一旦关闭则开启不了

二、始终

选择始终就会一直拥有定位权限,想什么时候获取就什么时候获取。
注意:这里可以做一些骚操作
当用户选择了始终,那么我们可以设置定位的时间段,比如多久开启一次定位多久关闭一次定位,这样一来就可以节省部分电量。

三、代码实现

1、plist文件加入权限


屏幕快照 2019-05-15 下午5.54.52.png

2、设置Background Modes


屏幕快照 2019-05-15 下午5.56.13.png

3、代码

- (void)BMKLocationManager:(BMKLocationManager * _Nonnull)manager didUpdateLocation:(BMKLocation * _Nullable)location orError:(NSError * _Nullable)error {
    //到设定时间自动关闭
    if ([self isTimeStopLocation]) {
        [self stopLocation];
        return;
    }
    
    if (error) {
        //如果定位失败自动到缓存里面取上次的定位信息
        NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"DKLOCATION"];
        self.dkLocation = [NSKeyedUnarchiver unarchiveObjectWithData:data];
        if (self.updateLocationBlock) {
            self.updateLocationBlock(self.dkLocation);
        }
        return;
    }
    
    //只在设置权限为始终的时候设置时间间隔
    if (self.locationStatus == DKLocationAuthorizationStatusStatusAlways) {
        if (self.isCollectLocation) {
            return;
        }
        
        [self performSelector:@selector(startLocation) withObject:nil afterDelay:self.updateTime];
        [self performSelector:@selector(pauseLocation) withObject:nil afterDelay:5];
        self.isCollectLocation = YES;
    }

 
    self.dkLocation.latitude = location.location.coordinate.latitude;
    self.dkLocation.longitude = location.location.coordinate.longitude;
    if (location.rgcData) {
        self.dkLocation.locationAddress = [NSString stringWithFormat:@"%@%@%@%@",location.rgcData.city,location.rgcData.district,location.rgcData.street,location.rgcData.streetNumber];
    }

    if (self.dkLocation) {
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.dkLocation];
        [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"DKLOCATION"];
        
    }
    
    if (self.updateLocationBlock) {
        self.updateLocationBlock(self.dkLocation);
    }
    
    NSLog(@"定位+++++++");
}

相关文章

  • IOS后台定位以及位置上传方案

    IOS后台定位以及位置上传方案 iOS定位原理和使用建议 iOS后台持续定位并定时上传 iOS 通过定位获取常驻后...

  • iOS 后台持续定位

    在日常的工作开发中,有时会遇到需要在后台持续运行的需求。对于这个需求,安卓实现起来比较简单,而iOS来说就比较复杂...

  • IOS后台持续定位

    因为业务需求,项目需要一直定位物流司机位置。主要难点就是APP最小化进入后台,自动被系统挂起,定位停止。 网上找了...

  • iOS后台持续定位

    继之前的后台播放音频,后台下载,再来一发后台持续定位的实现。流程差不多:1.开去后台模式: 2.在plist中加入...

  • iOS 后台持续定位

    环境: xcode8.2.11.Target->Capabilities->Background modes,勾选...

  • iOS 后台持续定位

    前言 前文讲到程序推到后台的运行情况iOS 对APP推到后台运行时长的探究,主要还是想做个后台定位,希望APP在按...

  • iOS后台持续定位

    1.开去后台模式: 2.在plist中加入NSLocationAlwaysUsageDescription这个键,...

  • iOS开发——后台持续定位

    项目有需求,要求app能够在后台持续定位,并根据某些情况发送本地推送。 首先,打开项目的后台定位模式,TARGET...

  • iOS后台持续定位实现方法

    1.选中target-->Gapability,打开Background Modes模式,并勾选Location ...

  • iOS 后台持续定位不生效

    问题:系统升级到iOS11之后,发现APP不提示否允许始终访问位置,iBeacon不起作用。我查看了一下手机隐私设...

网友评论

      本文标题:iOS 后台持续定位

      本文链接:https://www.haomeiwen.com/subject/sqmaoqtx.html