【发布时间】:2012-01-27 19:02:03
【问题描述】:
我有一个应用需要在后台提供基于位置的服务。 所以在 info.plist 我将背景模式设置为“应用程序注册位置更新”。 一切正常。
我的问题是,如何禁用它在后台运行? 是否可以添加一个选项并让用户将其设置为开/关?
据我所知 info.plist 不能以编程方式更改 那我该怎么做呢?
【问题讨论】:
标签: iphone ios ipad core-location cllocationmanager
我有一个应用需要在后台提供基于位置的服务。 所以在 info.plist 我将背景模式设置为“应用程序注册位置更新”。 一切正常。
我的问题是,如何禁用它在后台运行? 是否可以添加一个选项并让用户将其设置为开/关?
据我所知 info.plist 不能以编程方式更改 那我该怎么做呢?
【问题讨论】:
标签: iphone ios ipad core-location cllocationmanager
关键是描述——它支持注册位置更新。因此,您所要做的就是告诉您的位置管理器在应用程序进入后台(或之前)时停止更新,然后它不应该在后台使用位置更新。
无法在运行时重新定义应用的 info.plist 功能。
【讨论】:
传统上(并且务实地),您会在使用应用程序时将位置管理器设置为 -startUpdatingLocation。如果您让它全时运行,这将很快耗尽您的电池。通常你会调用它,获取你需要的信息,或者更新信息,调用 -stopUpdatingLocation。这让一切都休息了,不会再消耗电池了。
滚动到后台时,如果您仍想保持电池寿命,那么您在准确性方面的选择非常有限。主要的是-startMonitoringForSignificantChanges。此位置更新主要依赖于信号塔切换和三角测量。因此,如果您的用户没有移动很远的距离或处于蜂窝接收受限的区域,请不要指望这种背景模式能很好地工作。
您的其他后台选项是 -startMonitoringRegion。这允许您在地点周围创建一个基于圆圈的区域,并在您 -enterRegion 或 -exitRegion 时收到通知。这些都必须在进入后台之前设置好。它们确实具有更好的位置更新的额外好处。 WiFi 变化、手机信号塔切换,甚至其他使用位置更新的应用程序。操作系统会抓取所有位置更新并将它们汇集起来,并使它们可用于在操作系统中注册的任何区域。
您仍然可以选择在后台实时运行位置更新,但您的用户不会因为使用 30 分钟后没有电池而庆幸。
祝你好运。有很多示例如何在 SO 和 Web 上实现所有这些。诀窍是找到适合您的正确组合。祝你好运。
【讨论】: