我可以从Apple Watch的Backgroun上检测到锻炼,但是如何检测锻炼完成?

发布于 2025-02-12 06:13:43 字数 1713 浏览 0 评论 0原文

我可以检测到Apple Watch的BackGroun锻炼,

let workoutevent =  HKObjectType.workoutType()

 if store.authorizationStatus(for: workoutevent) != HKAuthorizationStatus.notDetermined {
            store.enableBackgroundDelivery(for: workoutevent, frequency: .immediate, withCompletion: { (worked, error) in
                print(worked)
                print(error)
                print("workoutevent enableBackgroundDelivery")
                guard worked else {
                    self.logger.error("Unable to set up background delivery from HealthKit: \(error!.localizedDescription)")
                    print("workoutevent unable to set up background ")
                    fatalError()
                }
                if error != nil {
                    print("workoutevent error is ")
                    print(error)
                }
            })


            backgroundObserver3 =
            HKObserverQuery(sampleType: workoutevent,
                            predicate: nil,
                            updateHandler: processUpdate3(query:completionHandler3:error:))
            if let queryworkout = backgroundObserver3 {
                print("Starting  workoutevent333 the background observer query.\(queryworkout)")
                store.execute(queryworkout)
            }

        }else{
            print("not determined....")
        }

每当我在Apple Watch上锻炼时, 都有以下代码 ProcessUpdate3 很好, 但是我需要知道的是用户完成锻炼时。 我该如何检测?

func processUpdate3(query: HKObserverQuery,
                       completionHandler3: @escaping () -> Void,
                       error: Error?) {
        print("come here when work out started ")

............. }

I can detect workout started on backgroun with apple watch, with below code

let workoutevent =  HKObjectType.workoutType()

 if store.authorizationStatus(for: workoutevent) != HKAuthorizationStatus.notDetermined {
            store.enableBackgroundDelivery(for: workoutevent, frequency: .immediate, withCompletion: { (worked, error) in
                print(worked)
                print(error)
                print("workoutevent enableBackgroundDelivery")
                guard worked else {
                    self.logger.error("Unable to set up background delivery from HealthKit: \(error!.localizedDescription)")
                    print("workoutevent unable to set up background ")
                    fatalError()
                }
                if error != nil {
                    print("workoutevent error is ")
                    print(error)
                }
            })


            backgroundObserver3 =
            HKObserverQuery(sampleType: workoutevent,
                            predicate: nil,
                            updateHandler: processUpdate3(query:completionHandler3:error:))
            if let queryworkout = backgroundObserver3 {
                print("Starting  workoutevent333 the background observer query.\(queryworkout)")
                store.execute(queryworkout)
            }

        }else{
            print("not determined....")
        }

whenever I started workout on apple watch, it goes to
processUpdate3
very well,
but what I need to know is to when user finish workout.
how can I detect it ?

func processUpdate3(query: HKObserverQuery,
                       completionHandler3: @escaping () -> Void,
                       error: Error?) {
        print("come here when work out started ")

...........
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唱一曲作罢 2025-02-19 06:13:47

我在您的代码中看不到它。但是在某个地方,您必须有一个hkworkoutsessessessessessessessessessessessession。我的应用程序已设置为跟踪运行,我将会话配置为“这样”。

    let configuration = HKWorkoutConfiguration()
    configuration.activityType = .running

    do {
        // HKWorkoutSession is set up here.
        session = try HKWorkoutSession(healthStore: healthStore, configuration: configuration)
        workoutBuilder = session.associatedWorkoutBuilder()
    } catch {
        // handle errors
    }

当用户点击结束锻炼按钮时,我调用session.end()

这里是链接到文档

I don't see it in your code. But somewhere you must have an HKWorkoutSession. My app is set up to track running and I configure the session to begin like so;

    let configuration = HKWorkoutConfiguration()
    configuration.activityType = .running

    do {
        // HKWorkoutSession is set up here.
        session = try HKWorkoutSession(healthStore: healthStore, configuration: configuration)
        workoutBuilder = session.associatedWorkoutBuilder()
    } catch {
        // handle errors
    }

When the users taps the end workout button I call session.end()

Here is a link to the documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文