swift - HKObjectQuery 不会停止
问题描述
我正在尝试为使用 Apple Watch 在我的应用程序上进行锻炼创造良好的用户体验。我可以在手表上启动 HKWorkoutSession 并在前台和后台正常停止。
我的问题是当手表应用程序在后台时 HKObjectQuery 似乎没有停止。澄清一下,如果我在锻炼期间锁定手表和手机约 3 分钟,然后尝试通过手机应用程序停止锻炼,则不会发生任何事情。
任何解决方案,甚至解释为什么都将不胜感激。
解决方案
您需要为 WatchKit 扩展启用后台模式。
手表应用被视为前台应用;它们仅在用户与其界面之一交互时运行。因此,相应的 WatchKit 扩展无法利用大多数后台执行模式来执行任务。但是,也有一些例外:
- 使用
HKWorkoutSession
对象开始和停止锻炼。使用此对象需要在 WatchKit 扩展目标(而不是 WatchKit App 目标)中启用锻炼处理后台模式功能。启用此模式会将UIBackgroundModes
密钥添加到扩展程序的Info.plist
文件中。
现在,当您的应用在 Apple Watch 上开始锻炼时,它将在后台响应 WatchConnectivity 消息。
因此,如果您已处理 WatchConnectivity 消息以停止锻炼,它将停止。
推荐阅读
- kubernetes - KubeAdm 配置失败 - 无法连接到服务器:EOF
- python - 如何让文本对象与 sklearn 分类器管道一起使用?
- javascript - 检测给定设备的 html5 视频的最大分辨率
- javascript - 将事件处理程序分配给动态创建的按钮
- c - structs, typedefs, and c header files; how to integrate without .c file
- biztalk - 如何替换 BizTalk 消息中的 < 和 >?
- php - 限制显示图像从数据库中获取并显示最新图像
- sql - 我正在尝试计算两周之间的差异,但是在绘制结果时出现了一个奇怪的峰值( SQL / BigQuery )
- google-app-engine - Google App Engine - 静态 IP 地址(自定义域)
- python - 散景删除网格图中元素之间的空间