iOS后台定位实现
iOS后台定位实现
(2013-01-24 16:43:12)
- standard location service(调用CLLocationManager的startUpdatingLocation)
- significant-change location service(调用CLLocationManager 的startMonitoringSignificantLocationChanges)
2、两者区别:
- 前者(startUpdatingLocation)是标准定位,想要在后台使用必须在info.plist文件中增加Required background modes属性,并选择App registers for location updates值。
- 前者(startUpdatingLocation)在后台运行时可能会因为资源问题被系统挂起(suspend)或终止(terminate),但一旦有更新会被唤起,但是当更新时系统任然资源紧张,则会被延迟调用委托。如果对于实时性要求高的可能不适合这个,很难控制用户机器性能状况。
- 前者(startUpdatingLocation)如果被用户手动关闭,就不会再被唤醒。
- 前者定位基于gps/基站/wifi定位,具体使用哪一种CoreLocation框架有一套自己的规则。
- 后者(startMonitoringSignificantLocationChanges)是使用基站定位的,所以设备一定要有电话模块,在plist中可以设置xx属性来限制可被下载安装的设备。
- 后者(startMonitoringSignificantLocationChanges)不管是在后台还是用户手动关闭都会被唤醒调用委托,只有3种方法可以阻止它的更新。(1)用户关闭定位服务(2)用户关闭对该app的定位服务(3)设备处于飞行模式或者无法开启必要的硬件(猜测是定位模块的硬件)。
- 后者(startMonitoringSignificantLocationChanges)什么时候更新呢?是在更换基站的时候更新。所以更新频率与基站密度有关。市区更新频率较郊区高。所以很多同学说没有更新是因为还在同一组基站范围内。
- 前者较后者耗电且精度高。
3、两者共性:
- 两者都更新位置信息时都回调相同的委托方法:-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
4、上传信息:
由于后台任务只分配了有限时间执行必要的操作,所以如果在超时之前未完成(比如网络请求),app将会被终止。这里有一个方法,可以申请额外的10分钟让你执行想要的操作,申请后台任务:beginBackgroundTaskWithExpirationHandler(不详细说了,使用方法可以查一下资料)。
5、总结:
2种方式各有利弊,根据使用场景而决定,前台运行的app通常要求准确实时定位,并且运行时间有限,考虑用第一种标准定位,比如导航应用。如果移动速度快(距离变化明显),长时间定位(监控),可以考虑后者,比如打车应用。
reference:
[1]http://www.mindsizzlers.com/2011/07/ios-background-location/
[2]https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html
iOS后台定位实现的更多相关文章
- iOS 后台定位被拒注意事项
iOS 后台定位被拒的原因很简单就是没有达到苹果对后台定位的要求. 本地要求: 1.在plist文件中添加字段 "Privacy - Location Always Usage Descri ...
- iOS后台定位,实时向服务器发送最新位置
第一步,开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图: Past ...
- iOS 后台定位
http://www.cocoachina.com/ios/20150724/12735.html 前言 之前的文章说过 我现在做的是LBS定位的社交APP 其中主要的一个功能就是能够实时定位社交圈中 ...
- iOS后台定位时授权提示一闪而过的解决办法
今天做后台定位时,授权提示"允许 XXX 在您并未使用该应用时范文您的位置吗?"总是一闪而过,点不到,或者压根就不弹出.后来找到了解决问题的方法,那就是:将CLLocationMa ...
- iOS 后台定位审核被拒How to clarify the purpose of its use in the locatio
4.5 - Apps using background location services must provide a reason that clarifies the purpose of th ...
- iOS:后台定位并实时向服务器发送位置
第一步:开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图: 第二步: ...
- iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位
1.概述 由于公司一款产品的需求,最近一直在研究iOS设备的后台定位.主要的难点就是,当系统进入后台之后,程序会被挂起,届时定时器.以及代码都不会Run~ 所以一旦用户将我的App先换到了后台,我的定 ...
- iOS 后台持续定位详解(支持ISO9.0以上)
iOS 后台持续定位详解(支持ISO9.0以上) #import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理, ...
- iOS 9适配系列教程:后台定位
http://www.cocoachina.com/ios/20150624/12200.html Demo:GitHub地址 [iOS9在定位的问题上,有一个坏消息一个好消息]坏消息:如果不适配iO ...
随机推荐
- iOS设计模式 - 命令模式
前言: 命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作.通过把请求封装成对象,客 户端可 以把它参数化并置入队列或日志中,也能够支持可 ...
- Cocos2d入门--3--小球运动
本章直接上源代码.内容不难,主要就是 HelloWorldScene.h文件: #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H_ ...
- 如何在sublime text 3 上安装插件package control
今天由于帮同事搞web方面的东西,于是又重新安装了sublime text 这款神器.发现官方网站都更新到sublime text3了,于是下载装了下,突然发现少了很重要的一个功能,竟然没有packa ...
- Nuget~管理自己的包包~丢了的包包快速恢复
之前写过一篇Nuget~管理自己的包包的文章,今天来讲Nuget的另一个东西,就是找回丢失的DLL,我们在引用包包后,在当前解决方案根目录就生成一个packages的目前,里面有我们从nuget下载的 ...
- npm报错Error: ENOENT, stat 'D:\NodeLearn\node-global'
最近想试下当前的当红炸子鸡 Nodejs,在安装配置时,发生了下面的错误: C:\nodejs\npmjs\bin>cd .. C:\nodejs\npmjs>cd .. C:\nodej ...
- lucene入门
一.lucene简介 Lucene是apache下的一个靠性能的.功能全面的用纯java开发的一个全文搜索引擎库.它几乎适合任何需要全文搜索应用程序,尤其是跨平台.lucene是开源的免费的工程.lu ...
- IE6-9中tbody的innerHTML不能赋值bug
IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 <!DOCTYPE html> <html> <head> <meta charset= ...
- 001.linux下clock()检测程序运行时间
#include <stdio.h> #include <time.h> int main() { int i; int k; clock_t start,end; //clo ...
- Syslog-ng
一.简介 与 syslog相比 ,syslog-ng 具有众多高级的功能:更好的网络支持,更加方便的配置,集中式的网络日志存储,并且更具有弹性.比如,使用syslogd时,所有的iptables日志与 ...
- html初始化
建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异. 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼 ...