我的应用程序需要在后台使用基于位置的服务。 所以在info.plist中我选择了“应用寄存器进行位置更新”的后台模式。 一切正常。
我的问题是,如何禁用它在后台运行? 是否可以添加选项并允许用户开启/关闭它?
据我所知info.plist不能以编程方式进行更改 那我怎么能这样做呢?
答案 0 :(得分:2)
关键是描述 - 它支持注册位置更新。因此,您应该做的就是告诉您的位置管理员在应用程序进入后台(或之前)时停止更新,然后应该不在后台使用位置更新。
无法在运行时重新定义应用的info.plist功能。
答案 1 :(得分:0)
传统上(并且实际)您将在您的应用正在使用时将您的位置管理器设置为-startUpdatingLocation。如果让它全时运行,这将很快耗尽电池电量。通常,您可以调用它,获取所需信息或更新信息,调用-stopUpdatingLocation。这样可以让一切都得到休息,不再耗电。
滚动到背景时,如果您仍希望保持电池寿命,则精度选项非常有限。主要是-startMonitoringForSignificantChanges。此位置更新主要依赖于手机信号塔切换和三角测量。因此,如果您的用户没有移动很远的距离或者是在细胞接收有限的区域,请不要期望这种背景模式能够很好地工作。
您的其他背景选项是-startMonitoringRegion。这允许您在地点周围创建基于圆的区域,并在-enterRegion或-exitRegion时获取通知。这些都必须在进入后台之前进行设置。它们确实具有更好的位置更新的额外好处。 WiFi更改,手机信号塔切换,甚至使用位置更新的其他应用程序。操作系统会抓取所有位置更新并将其汇总,并将其提供给在操作系统中注册的任何区域。
您仍然可以选择在后台实时运行位置更新,但您的用户不会感谢他们在使用30分钟后没有电池。
祝你好运。有很多例子说明如何在SO和网络上实现所有这些。诀窍是找到适合你的合适组合。祝你好运。