iOS后台持续定位并定时上传
最近做一个考勤APP,功能很简单,就是一直在后台运行,每隔固定时间向服务器上传一次位置信息。持续运行24小时测试,功能实现。
1.ViewController.h文件:
#import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理,.h文件完整代码如下:
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>@interface ViewController : UIViewController<CLLocationManagerDelegate>@end
2.info.list文件:
右键,Add Row,添加的Key为NSLocationAlwaysUsageDescription,其它值默认,示例如下:
3.添加后台定位权限
4.ViewController.m 文件:
(1)定义一个私有CLLocationManager对象
(2)初始化并设置参数(initLocation方法),其中
locationManager.desiredAccuracy设置定位精度,有六个值可选,精度依次递减
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometer
kCLLocationAccuracyThreeKilometers
locationManager.pausesLocationUpdatesAutomatically 设置是否允许系统自动暂停定位,这里要设置为NO,刚开始我没有设置,后台定位持续20分钟左右就停止了!
(3)实现CLLocationManagerDelegate的代理方法,此方法在每次定位成功后调用:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray*)locations;
*也可以通过实现以下方法:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
(4)实现CLLocationManagerDelegate的代理方法,此方法在定位出错后调用:
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
#import "ViewController.h"@interface ViewController (){CLLocationManager *locationManager;CLLocation *newLocation;CLLocationCoordinate2D coordinate;
}@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self initLocation];
}#pragma mark 初始化定位
-(void)initLocation {locationManager=[[CLLocationManager alloc] init];locationManager.delegate = self;locationManager.desiredAccuracy = kCLLocationAccuracyBest;//设置定位精度if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){[locationManager requestWhenInUseAuthorization];}if(![CLLocationManager locationServicesEnabled]){NSLog(@"请开启定位:设置 > 隐私 > 位置 > 定位服务");}if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {[locationManager requestAlwaysAuthorization]; // 永久授权[locationManager requestWhenInUseAuthorization]; //使用中授权}locationManager.pausesLocationUpdatesAutomatically = NO;[locationManager startUpdatingLocation];//[locationManager startMonitoringSignificantLocationChanges];
}#pragma mark 定位成功
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{newLocation = [locations lastObject];double lat = newLocation.coordinate.latitude;double lon = newLocation.coordinate.longitude;NSLog(@"lat:%f,lon:%f",lat,lon);
}#pragma mark 定位失败
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{NSLog(@"error:%@",error);
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end
**经过充电状态下以及非充电状态下测试各24小时,APP运行正常,下图为考勤记录截图,另外测试时,每次定位成功都将日志保存到本地plist文件中中,方法链接:http://blog.csdn.net/dolacmeng/article/details/44805953
allowDeferredLocationUpdatesUntilTraveled:timeout:
,可以设置在用户移动多远距离或者经过多少时间间隔后才进行一次定位,从而达到省电的目的。// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)managerdidUpdateLocations:(NSArray *)locations {// Add the new locations to the hike[self.hike addLocations:locations];// Defer updates until the user hikes a certain distance// or when a certain amount of time has passed.if (!self.deferringUpdates) {CLLocationDistance distance = self.hike.goal - self.hike.distance;NSTimeInterval time = [self.nextAudible timeIntervalSinceNow];[locationManager allowDeferredLocationUpdatesUntilTraveled:distancetimeout:time];self.deferringUpdates = YES;}
}
因此我们把didUpdateLocations方法改成这样(deferringUpdates是BOOl类型全局变量,标记是否是Defer):
#pragma mark 定位成功
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{newLocation = [locations lastObject];double lat = newLocation.coordinate.latitude;double lon = newLocation.coordinate.longitude;NSLog(@"lat:%f,lon:%f",lat,lon);if (!self.deferringUpdates) {CLLocationDistance distance = 500;NSTimeInterval time = 20;[locationManager allowDeferredLocationUpdatesUntilTraveled:distancetimeout:time];self.deferringUpdates = YES;}
}
相关文章:

jQuery UI vs Kendo UI jQuery Mobile vs Kendo UI Mobile
jQuery UI vs Kendo UI http://jqueryuivskendoui.com/#introduction jQuery Mobile vs Kendo UI Mobile http://jqueryuivskendoui.com/#mobile-introduction Kendo UI教程 http://www.cnblogs.com/pangblog/archive/2013/09/10/3313135.html转载于:https://www.cnblogs.com/j…

Oracle的基本操作(二:存储过程)
1、编写一个存储过程,根据输入的工作类型,输入该工作的平均工资。 -- Created on 2018/9/30 by YANXUKUNcreate or replace procedure avgsal(v_job in scott.emp.job%type)isavgsal2 number;beginselect avg(sal) into avgsal2 from scott.emp where j…

web11 Struts处理表单数据
电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66.com 学习网站:www.aikan66.com Java网站:www.aikan66.co…

瀑布流开源这两天
想必第一眼看到 Masonery 效果的人们会和当初的我有同样的感觉,惊艳!尤其是在你双击浏览器标题栏的空白处之后,所有的区块都在默默寻找自己的位置,无论大小,就像上海虹桥火车站涌入地铁的人群。和技术实现无关…

iOS网络请求总结
*说明:文章中HTTP为宏定义的http地址,事例通过app_login.action的接口,通过传递policyNum、plateNum、phoneNum三个参数进行登录操作 一、方法1: Foundation框架 NSURLConnection (1)同步请求:同…

MongoDB数据库(一:基本操作)
1、创建名称为自己姓名拼音缩写的数据库; 2、创建名为姓名拼音缩写col的集合,如dugncol; 3、删除2中的集合,重新创建格式如dugncolnew的集合; 4、在3创建的集合中,插入10条文档数据,要求分别插入…

NYOJ--811--变态最大值
/*Name: NYOJ--811--变态最大值Author: shen_渊 Date: 17/04/17 15:49Description: 看到博客上这道题浏览量最高,原来的代码就看不下去了 o(╯□╰)o */#include<cstring> #include<iostream> #include<algorithm> using namespace std; struct…

扩展的八皇后问题
百度百科:八皇后问题是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同…

C++ 常用函数方法
/* * 拆分字符串 * 参数: * strData 字符串 * split 分隔符 * 返回: * 返回动态数组std::vector<std::string> ,记得要delete 内存 */ std::vector<std::string>* GetStringArray(char* strData,char* split)…

MongoDB数据库(二:高级操作)
练习一、完成使用Java代码连接MOngoDB,创建集合,获取集合,插入文档,检 索所有文档,更新文档,删除第一个文档。 a)连接MOngoDB b)创建集合 c)获取集合 d)插入文档 e)检索所有文档 f)更新文档 g)…

将XML转为HTML
文章参考:http://dreamweaver.abang.com/od/html/a/xml2html3.htm http://www.w3school.com.cn/xml/xml_xsl.asp ParseXML2HTML.xsl:代码如下 1 <?xml version"1.0" encoding"utf-8"?> 2 <xsl:styleshee…

Linux运维相关目录
Linux——相关运维配置文档目录 tcp 三次握手yum 配置你对linux了解多少,Linux 系统结构详解!Linux LAMP环境搭建Centos6.7安装Apache2.4Mysql5.6Apache2.4Linux搭建DNS服务器Nginx概念及基础安装--详细讲解深入NginxNginx的继续深入(日志轮询…
iOS8底部弹出日期选择或自定义选择器的方法
本文需要实现的日期选择器和自定义选择器效果如下: 在iOS8之前,可以通过UIActionSheet来实现,在iOS8之后,可以通过UIAlertController实现,UIAlertController的官方解释如下: A UIAlertController object d…

HDFS_API基本应用
实验 目的 要求 目的: 了解HDFS文件系统;掌握HDFS的架构及核心组件的职能;掌握HDFS数据的读写操作;HDFS常用操作(Shell。Java API)了解Hadoop2.0中HDFS相关的新特性 实 验 环 境 Java jdk 1.8&…

Docker 清理命令集锦
杀死所有正在运行的容器 复制代码代码如下:docker kill $(docker ps -a -q)删除所有已经停止的容器 复制代码代码如下:docker rm $(docker ps -a -q)删除所有未打 dangling 标签的镜像 复制代码代码如下:docker rmi $(docker images -q -f danglingtrue)删除所有镜像 复制代码代…

CentOS 6.4下编译安装MySQL 5.6.14
概述: CentOS 6.4下通过yum安装的MySQL是5.1版的,比较老,所以就想通过源代码安装高版本的5.6.14。 正文: 一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉…
iOS实现图片自动轮播展示
一、需要实现的效果如下图1,首页图片自动轮播展示,其中图片从网络异步加载,加载过程用风火轮显示加载中,如图2。 本文参考了以下博客文章: http://www.haodaima.net/art/2687144 http://www.cnblogs.com/xiaobaizhu/a…

Hadoop_MapReduce的基本应用
实验 目的 要求 目的: 了解MapReduce掌握MapReduce编程模型掌握MapReduce常见核心API编程MapReduce开发常用功能 实 验 环 境 Java jdk 1.8;apache-maven-3.6.0;Myeclipse C10;Hadoop集群;练习内容 任务一&…

Android源码编译过程之九鼎开发板
1 build_kernel()2 {3 # 进入源码顶层目录4 cd ${BS_DIR_KERNEL} || return 15 # 编译配置文件6 make ${BS_CONFIG_KERNEL} ARCHarm CROSS_COMPILE${BS_CROSS_TOOLCHAIN_KERNEL} || return 17 # 编译内核uImage(arm架构、交…

eaccelerator 完全手册:配置、控制、API接口
安装官方有很详细的文档 转自 http://www.enjoyphp.com/2010/eaccelerator-manual/ 配置选项 eaccelerator.shm_size指定 eAccelerator 能够使用的共享内存数量,单位: MB. “0″ 代表操作系统默认。默认值为 “0″。 eaccelerator.cache_dir用户磁盘缓存的目录。eAc…

iOS解决键盘阻挡输入框
解决思路:有时用户编辑输入框时,键盘会遮挡输入框,这时候只要将视图整体上移键盘的高度即可,编辑完成后再将视图下移键盘的高度恢复正常显示。 【方法1】 实现UITextField代理UITextFieldDelegat的两个方法textFieldShouldBegin…

HBASE_API的应用
实验 目的 要求 目的: 掌握HBase编程;搭建HBase编程环境;配置Myeclipse引入对应的jar包; 实 验 环 境 Java jdk 1.8;apache-maven-3.6.0;Myeclipse C10;Hadoop集群&#…
Linux进程间通信--信号
signal 一、初步理解信号 为了理解信号 ,先从我们最熟悉的场景说起: 1.用户输入命令,在Shell下启动一个前台进程。 2.用户按下Ctrl-C,这个键盘输入产生一个硬件中断。 3.如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到…

如何优化cocos2d程序的内存使用和程序大小:第一部分
译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”。而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个非常有意义的话题:“请简单地…
UILayer的一些属性
iOS创建UIView是直接在Core Animation layers上进行绘制,每一个UIView实例都会自动创建CALayer的实例,并且设置为UIView实例的layer属性。 以下事例通过设置UIImageView的layer,实现阴影、圆角、边框和旋转缩放等效果 -(void)initImgView{UI…

Hive的基本应用
实验 目的 要求 目的: 了解Hive架构,掌握Hive环境部署;了解Hive与Hadoop及传统关系型数据库的对比;掌握Hive中DDL和DML的使用;了解Hive高级应用;Hive内置函数使用及Hive自定义函数;了解Hive常…

template
//引入包<script type"text/javascript" src../template.js></script> //定义一个有ID的script标签:<script idtem type"text/html"> <h4>{{name}}</h4> <ul> {{each films as value}} <li> <str…
UICollectionView的基本使用(1)
如果是简单实用UICollectionView的话,用法和UITableView基本一致。下面是用UICollectionView实现的简单图片显示 (1)打开storyboard,将一个UICollectionView拖到View Controller Scene中,默认的UICollectionView已经包…

SQL Server的数据库连接的极限在哪儿?
在软件设计中,关于多层的设计,有一部份是有关数据库的。 设计上分成这样三层 客户端UI -- 应用服务器 -- 数据库服务器 有个说法是,可以在应用服务器这一层共享使用数据库连接池,从而减轻数据库服务器的负担。 我查了好多资料&…

Docker的使用(五:Docker中的网络与数据管理)
实验环境 三台运行有Ubuntu 16.04 操作系统的虚拟机,并每台主机中已安装docker环境; 学习目标 docker的网络管理docker Swarm集群的使用Volume数据卷的使用 实验内容 任务一:Docker网络管理 1、Docker默认网络管理 docker安装时自动创建…