首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS中低功耗模式禁用通知的接收

iOS中低功耗模式禁用通知的接收
EN

Stack Overflow用户
提问于 2017-12-02 16:03:14
回答 1查看 1K关注 0票数 1

我正试图遵循iOS能源指南,并使我的应用程序低功耗模式意识到;为此,我遵循指南发布的这里,其中提供了如何订阅这类事件的代码。如下所示,我履行了这一职能:

代码语言:javascript
复制
  /// Function to subscribe to low-power mode events
  ///
  func subscribeToLowBatteryNotification() {
    NotificationCenter.default.addObserver(self,
                        selector: #selector(lowBatteryHandle),
                        name: Notification.Name.NSProcessInfoPowerStateDidChange,
                        object: nil)
  }

  /// handler for low-power mode events.
  ///
  @objc func lowBatteryHandle(_ notification: Notification) {
    let lowPowerModeEnabled = ProcessInfo.processInfo.isLowPowerModeEnabled

    if lowPowerModeEnabled {
      stopTrackingBackground()
    } else {
      startTrackingBackground()
    }
  }

这很简单。然后,我将我的应用程序放在后台,同时根据需要持续跟踪位置;然后,我启用低功耗模式,并且确实收到了通知(在后台),成功地促使应用程序暂停跟踪。不幸的是,当低功耗被禁用和我希望收到一个类似的事件的状态改变(而在后台),这是没有收到的背景和事件,只有当我再次进入应用程序。有人知道如何在后台接收这些事件吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-02 16:18:57

当应用程序停止后台跟踪时,系统会移动到暂停应用程序。虽然暂停您的应用程序不会收到通知,甚至是关于低功耗模式的状态。一种策略可能是移动到较低级别的位置传递频率,例如重大地点变化,或者根据您的用例可能或不适合的情况使用延迟定位更新。

当用户禁用后台app设置时,无论是在全局还是为您的应用程序,重大更改位置服务都不会重新启动应用程序。此外,当后台App关闭时,即使在前台,应用程序也不会收到重大的更改或区域监视事件。

由于低功耗模式在全球范围内禁止后台应用程序刷新,我认为这意味着重大的更改事件可能不会交付。注释中写着“当用户禁用时”,但它并没有说明在低功耗模式下,这意味着是主操作还是次要操作。然而,延迟定位更新将是可用的。

苹果在自动暂停位置更新上的文档中提供了其他指导

对于具有在用授权的应用程序,暂停位置更新将结束对位置更改的访问,直到应用程序再次启动并能够重新启动这些更新。如果您不希望位置更新完全停止,请考虑禁用此属性,并在应用程序移到后台时将位置精度更改为kCLLocationAccuracyThreeKilometers。这样做可以让您继续以电源友好的方式接收位置更新。

另外,在标准定位服务的文档中,apple提供了更多的指导

要将功耗降到最低,千万不要将desiredAccuracy属性设置为比实际需要的更高的精度。同样,始终将distanceFilter属性设置为满足应用程序需求的最大值。系统总是试图为您提供可用的最佳位置数据,但这些属性使系统能够灵活地在不需要硬件元素时关闭它们。

所有这些信息都表明,若要在启用低功耗模式时继续接收更新,必须使用标准服务或延迟服务。为了在启用标准服务时对电源友好,您可以通过调整distanceFilterdesiredAccuracy属性来重新配置您的经理以交付更少的更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47609760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档