以编程方式更改所需的背景模式

时间:2011-12-26 02:49:37

标签: iphone ios ipad core-location cllocationmanager

我的应用程序需要在后台使用基于位置的服务。 所以在info.plist中我选择了“应用寄存器进行位置更新”的后台模式。 一切正常。

我的问题是,如何禁用它在后台运行? 是否可以添加选项并允许用户开启/关闭它?

据我所知info.plist不能以编程方式进行更改 那我怎么能这样做呢?

2 个答案:

答案 0 :(得分:2)

关键是描述 - 它支持注册位置更新。因此,您应该做的就是告诉您的位置管理员在应用程序进入后台(或之前)时停止更新,然后应该不在后台使用位置更新。

无法在运行时重新定义应用的info.plist功能。

答案 1 :(得分:0)

传统上(并且实际)您将在您的应用正在使用时将您的位置管理器设置为-startUpdatingLocation。如果让它全时运行,这将很快耗尽电池电量。通常,您可以调用它,获取所需信息或更新信息,调用-stopUpdatingLocation。这样可以让一切都得到休息,不再耗电。

滚动到背景时,如果您仍希望保持电池寿命,则精度选项非常有限。主要是-startMonitoringForSignificantChanges。此位置更新主要依赖于手机信号塔切换和三角测量。因此,如果您的用户没有移动很远的距离或者是在细胞接收有限的区域,请不要期望这种背景模式能够很好地工作。

您的其他背景选项是-startMonitoringRegion。这允许您在地点周围创建基于圆的区域,并在-enterRegion或-exitRegion时获取通知。这些都必须在进入后台之前进行设置。它们确实具有更好的位置更新的额外好处。 WiFi更改,手机信号塔切换,甚至使用位置更新的其他应用程序。操作系统会抓取所有位置更新并将其汇总,并将其提供给在操作系统中注册的任何区域。

您仍然可以选择在后台实时运行位置更新,但您的用户不会感谢他们在使用30分钟后没有电池。

祝你好运。有很多例子说明如何在SO和网络上实现所有这些。诀窍是找到适合你的合适组合。祝你好运。