【问题标题】:Programmatically change Required background modes以编程方式更改所需的后台模式
【发布时间】:2012-01-27 19:02:03
【问题描述】:

我有一个应用需要在后台提供基于位置的服务。 所以在 info.plist 我将背景模式设置为“应用程序注册位置更新”。 一切正常。

我的问题是,如何禁用它在后台运行? 是否可以添加一个选项并让用户将其设置为开/关?

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

【问题讨论】:

    标签: iphone ios ipad core-location cllocationmanager


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      传统上(并且务实地),您会在使用应用程序时将位置管理器设置为 -startUpdatingLocation。如果您让它全时运行,这将很快耗尽您的电池。通常你会调用它,获取你需要的信息,或者更新信息,调用 -stopUpdatingLocation。这让一切都休息了,不会再消耗电池了。

      滚动到后台时,如果您仍想保持电池寿命,那么您在准确性方面的选择非常有限。主要的是-startMonitoringForSignificantChanges。此位置更新主要依赖于信号塔切换和三角测量。因此,如果您的用户没有移动很远的距离或处于蜂窝接收受限的区域,请不要指望这种背景模式能很好地工作。

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

      您仍然可以选择在后台实时运行位置更新,但您的用户不会因为使用 30 分钟后没有电池而庆幸。

      祝你好运。有很多示例如何在 SO 和 Web 上实现所有这些。诀窍是找到适合您的正确组合。祝你好运。

      【讨论】:

      • 谢谢,因为电池寿命,甚至用户关闭应用程序,gps 图标仍然存在。所以我想给出一个使用可以选择的选项是 gps 继续在后台运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多