HKWorkoutSession 没有将应用程序放在 Apple Watch 前面
Posted
技术标签:
【中文标题】HKWorkoutSession 没有将应用程序放在 Apple Watch 前面【英文标题】:HKWorkoutSession isn't keeping app at front of Apple Watch 【发布时间】:2015-07-04 19:52:11 【问题描述】:据说运行 HKWorkoutSession 的应用程序将比其他 watchOS 2 应用程序具有特殊权限,因此当用户查看他们的 Apple Watch 时,它将转到显示正在运行锻炼的视图而不是表盘。
目前,在我的设备和模拟器上,情况并非如此。如果我启动 HKWorkoutSession,然后离开 5 分钟,然后与 Apple Watch 或 Watch Simulator 交互,它会显示表盘。
如果我随后打开我的应用程序,它似乎已被冻结,而不是终止(我想象其他应用程序会发生这种情况)。因为当我需要在我的 query.updateHandler 中接收响应时,UI 会更新。此外,如果我将其设置为每次我的 query.updateHandler 收到新的 HKQuantitySample 时提供触觉反馈,它会这样做,因此应用程序必须以某种形式在后台运行。
有没有其他人注意到这种行为,我是否做错了什么,或者期待一些我不应该做的事情?
这是我开始 HKWorkoutSession 的方式:
self.workoutSession = HKWorkoutSession(activityType: HKWorkoutActivityType.Other, locationType: HKWorkoutSessionLocationType.Indoor)
self.healthStore.startWorkoutSession(self.workoutSession)
success, error in
if error != nil
print("startWorkoutSession \(error)\n")
self.printLabel.setText("startWorkoutSession \(error)")
self.printLabel.setTextColor(UIColor.redColor())
【问题讨论】:
经过进一步调查,我决定我的代码继续在后台运行,并且我应该有代码来更新 willActivate 上的 UI,而不是等待新的查询。我会保持这个开放的时间更长一些,因为对于为什么应用程序不保持在前台没有明确的答案。 您是否尝试过更改 AppleWatch 上在抬腕时打开上次活动的设置?在 ios General 上的 AppleWatch 应用程序中。如果这对您的用户至关重要,您可以提示他们更改设置 是的,如果这个“错误”最终成为默认行为,那是一个不错的主意。理想情况下,虽然我不想强迫用户仅为我的应用更改他们的 Apple Watch“工作流程”。 【参考方案1】:我们也看到了这一点,目前我们已确保配置了“打开最后一个活动”。
当 UI 处于活动状态时,我们会启动一个 dispatch_timer,以 1 秒的间隔请求和处理数据。
确保您使用 NSUserProcessInfo 方法进行任何重要的处理,并在您不再处于活动状态时暂停 dispatch_timers。否则你会崩溃。
【讨论】:
什么是NSUserProcessInfo?搜索它时,我只找到 NSProcessInfo 并且似乎只有 OS X。我很快就崩溃了。我需要检查是否应该在返回样本后发送触觉振动,而这需要在 UI 不活动时发生。 有趣的是,当我配置了“打开上次活动”时,我得到的心率数据要少得多,但没有崩溃。 对不起,我是凭记忆这样做的,实际上是:NSProcessInfo.processInfo().performExpiringActivityWithReason
。它提供了一个块,该块将在屏幕处于非活动状态后执行到期任务。回复:心率 我相信它在 beta 版本说明中,它目前在屏幕处于非活动状态时不测量心率。这是一个已知的错误。
当我开始锻炼时,我的心率很好。但是当屏幕锁定(变黑)时,心率样本会停止。过了一会儿,传感器也停止了(不再是绿色了)。你知道这是怎么回事吗?以上是关于HKWorkoutSession 没有将应用程序放在 Apple Watch 前面的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 HKWorkoutSession(通常)没有结束?
如何使 HKworkoutsession 始终是一个积极的锻炼课程
如何使 HKworkoutsession 始终是一个积极的锻炼课程