首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从HealthKit获取合理格式的心率变异性读数

无法从HealthKit获取合理格式的心率变异性读数
EN

Stack Overflow用户
提问于 2017-11-18 00:32:25
回答 1查看 546关注 0票数 0

我需要能够读取HealthKit中的所有心率变异性读数,并按创建日期对它们的值进行排序。

我可以使用SampleQuery在一定的时间间隔内读取HealthKit中的所有读数,如下所示:

代码语言:javascript
运行
复制
func getHRVSampleQuery() {
    let HRVType = HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN)

    let sortDescriptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate, ascending: false)

    let startDate = Date() - 7 * 24 * 60 * 60 // start date is a week from now
    //  Set the Predicates & Interval
    let predicate: NSPredicate? = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: HKQueryOptions.strictEndDate)

    let sampleQuery = HKSampleQuery(sampleType: HRVType!, predicate: predicate, limit: 30, sortDescriptors: [sortDescriptor]) { sampleQuery, results, error  in
        if(error == nil) {
            for result in results! {
                print("Startdate")
                print(result.startDate)
                print(result.sampleType)
                print(result)
                // print(result.metadata)
            }
        }
    }
    healthStore.execute(sampleQuery)
}

这将打印90.4091 ms AC994386-6981-496A-9C0C-5F6839664302 "Apple Watch van Bas" (4.0), "Watch3,4" (4.0)"Apple Watch" (2017-11-10 15:58:21 +0000 - 2017-11-10 16:03:32 +0000)

太棒了!我需要的所有值:-)

然而,似乎没有办法获得90.4091ms...

所以,我现在通过查询一个HKStatisticsCollectionQuery来解决这个问题。

代码语言:javascript
运行
复制
func getHRV() -> Void {
    //   Define the Step Quantity Type
    let HRVType = HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN)

    //   Get the start of the day
    let date = Date() - 31 * 24 * 60 * 60
    let cal = Calendar(identifier: Calendar.Identifier.gregorian)
    let newDate = cal.startOfDay(for: date)

    //  Set the Predicates & Interval
    let startDate = Date() - 7 * 24 * 60 * 60 // start date is a week
    var predicate: NSPredicate? = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: HKQueryOptions.strictEndDate)

    // Define interval
    var interval = DateComponents()
    interval.second = 7

    //  Perform the Query
    let query = HKStatisticsCollectionQuery(quantityType: HRVType!, quantitySamplePredicate: predicate, options: .separateBySource, anchorDate: startDate, intervalComponents:interval)

    query.initialResultsHandler = { query, results, error in

        if error != nil {
            print("Cannot read HRV from HealthKit. Either the user hasn't given permission or permissions are not set.")
            //  Something went Wrong
            return
        }

        print(results?.sources())

        if let myResults = results {
            print("\(results! as HKStatisticsCollection)")
            print("results")
            print(results?.sources())

            let startDate = Date() - 7 * 24 * 60 * 60
            print("startDate")
            print(startDate)
            print("End date")
            print(Date() as Date)
            print(myResults)
            myResults.enumerateStatistics(from: startDate, to: Date() as Date) { statistics, stop in
                if let quantity = statistics.averageQuantity() {
                    print(statistics)
                }
            } //end block
    }

    healthStore.execute(query)
}

这里的问题是,结果包含正确的HRV值,但在枚举结果时,我没有得到任何结果。

是不是我在那个街区做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-11-20 10:46:11

您可以通过调整代码得到HRV的值,单位为ms,如下所示:

代码语言:javascript
运行
复制
let sampleQuery = HKSampleQuery(sampleType: HRVType!, predicate: predicate, limit: 30, sortDescriptors: [sortDescriptor]) { sampleQuery, results, error  in
    if(error == nil) {
        for result in results! {
            print("Startdate")
            print(result.startDate)
            print(result.sampleType)
            print(result.quantity.doubleValue(for: HKUnit.secondUnit(with: .milli)))
            print(result)
            // print(result.metadata)
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47355242

复制
相关文章

相似问题

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