-->

UIBackgroundModes位置,并与区域监控显著位置变化(UIBackgroundModes

2019-07-04 01:38发布

我有一个使用的组合应用程序startMonitoringForRegion:startMonitoringSignificantLocationChanges保持知道用户在哪里时,应用程序是在后台。 这是否意味着我需要包括location的值UIBackgroundModes在关键Info.plist

这是从文档报价:

该显著变化位置服务,强烈建议那些不需要高精度的位置数据的应用程序。 有了这项服务,当用户的位置显著的变化只产生位置更新; 因此,它是理想的提供与非关键,位置相关的信息的用户社交应用程序或应用程序。 如果当发生更新该应用被暂停时,系统唤醒它在后台处理更新。 如果应用程序启动该服务,然后结束后,系统将重新启动应用程序会自动在新的位置变得可用。 这项服务是iOS中4及更高版本,它仅适用于包含蜂窝无线设备。

...

提供连续的位置更新给用户(甚至在后台运行)的应用程序可以通过在其Info.plist文件中UIBackgroundModes键(与位置值)启用后台位置服务。 在UIBackgroundModes键此值的引入不会从暂停应用程序排除系统,但它告诉它应该醒了,每当有新的位置数据,提供应用系统。 因此,此键可以有效地在后台运行,无论什么时候出现,以处理位置更新的应用程序。

我对此的解释是,该location的值UIBackgroundModes如果应用程序需要不断位置更新,就像卫星导航应用关键时,才需要。

我也曾尝试在设备上运行应用程序没有location的值UIBackgroundModes密钥并继续报告显著位置改变,当输入的是退出的区域。

同样,唯一的地方UIBackgroundModes在提到CLLocationManager类参考是在startUpdatingLocation讨论,这我不使用。

Answer 1:

你说得对的location的关键,当你的应用程序需要高精度的位置,即使在后台更新时,它才是必需的。 像Runkeeper东西使用这允许它保持跟踪你的位置,甚至当你使用其他应用程序与多任务处理。 从文档的iOS键: UIBackgroundModes

“位置”:该应用程序提供基于位置的信息给用户,并要求使用的标准定位服务(而不是在显著改变位置的服务)来实现此功能。

凡存在在后台运行的替代品,这些替代品,而应使用。 例如,应用程序可以使用signifiant位置改变接口接收的而不是注册作为背景位置的应用程序位置的事件。

地区监测工作,将没有location关键。 事实上,区域监测工作,将不会被启用密钥的任何特殊的iOS。

你说你不使用CLLocationManager ,但如果你使用区域的监控,你将不得不使用这个类。 您需要设置一个位置管理委托你的应用真正得到该地区的通知。



Answer 2:

是的,你必须要在Info.plist中下底色模式添加“位置”键,如果你使用的是显著改变位置服务(startMonitoringSignificantLocationChanges)来监视用户位置的背景和在应用程序中杀死状态。



文章来源: UIBackgroundModes location and significant location changes with region monitoring