首页 > 解决方案 > HKObjectQuery 不会停止

问题描述

我正在尝试为使用 Apple Watch 在我的应用程序上进行锻炼创造良好的用户体验。我可以在手表上启动 HKWorkoutSession 并在前台和后台正常停止。

我的问题是当手表应用程序在后台时 HKObjectQuery 似乎没有停止。澄清一下,如果我在锻炼期间锁定手表和手机约 3 分钟,然后尝试通过手机应用程序停止锻炼,则不会发生任何事情。

任何解决方案,甚至解释为什么都将不胜感激。

标签: swiftwatchkitapple-watchhealthkithkhealthstore

解决方案


您需要为 WatchKit 扩展启用后台模式。

用于锻炼的 WatchKit 背景模式

watchOS 应用程序编程指南:利用 iOS 技术状态:

手表应用被视为前台应用;它们仅在用户与其界面之一交互时运行。因此,相应的 WatchKit 扩展无法利用大多数后台执行模式来执行任务。但是,也有一些例外:

  • 使用HKWorkoutSession对象开始和停止锻炼。使用此对象需要在 WatchKit 扩展目标(而不是 WatchKit App 目标)中启用锻炼处理后台模式功能。启用此模式会将UIBackgroundModes密钥添加到扩展程序的Info.plist文件中。

现在,当您的应用在 Apple Watch 上开始锻炼时,它将在后台响应 WatchConnectivity 消息。
因此,如果您已处理 WatchConnectivity 消息以停止锻炼,它将停止。


推荐阅读