android计步器摘要,ios - Healthkit每小时活动摘要包含步数,距离和卡路里? - 堆栈内存溢出...

查询Healthkit应返回包含步长,距离和卡路里的数组对象。

我能够单独归还他们

活动步骤/小时

func activitySteps(_ startDate:NSDate, endDate:NSDate, anchorDate:NSDate, completion: @escaping (Array, NSError?) -> ()) {

let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)

let interval = NSDateComponents()

interval.hour = 1

let predicate = HKQuery.predicateForSamples(withStart: startDate as Date, end: endDate as Date, options: .strictEndDate)

let query = HKStatisticsCollectionQuery(quantityType: type!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: anchorDate as Date, intervalComponents:interval as DateComponents)

query.initialResultsHandler = { query, results, error in

if let myResults = results{

var stepsArray: [NSObject] = []

myResults.enumerateStatistics(from: startDate as Date, to: endDate as Date) {

statistics, stop in

if let quantity = statistics.sumQuantity() {

let steps = quantity.doubleValue(for: HKUnit.count())

// print("\(statistics.endDate.timeIntervalSince1970): steps = \(steps)")

let ret = [

"steps": steps,

"startDate" : statistics.startDate.timeIntervalSince1970 * 1000.0,

"endDate": statistics.endDate.timeIntervalSince1970 * 1000.0

] as [String : Any]

stepsArray.append(ret as NSObject)

}

}

completion(stepsArray, error as NSError?)

}

}

healthKitStore.execute(query)

}

活动距离/小时

func activityDistance(_ startDate:NSDate, endDate:NSDate, anchorDate:NSDate, completion: @escaping (Array, NSError?) -> ()) {

let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)

let interval = NSDateComponents()

interval.hour = 1

let predicate = HKQuery.predicateForSamples(withStart: startDate as Date, end: endDate as Date, options: .strictEndDate)

let query = HKStatisticsCollectionQuery(quantityType: type!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: anchorDate as Date, intervalComponents:interval as DateComponents)

query.initialResultsHandler = { query, results, error in

if let myResults = results{

var distanceArray: [NSObject] = []

myResults.enumerateStatistics(from: startDate as Date, to: endDate as Date) {

statistics, stop in

if let quantity = statistics.sumQuantity() {

let distance = quantity.doubleValue(for: HKUnit.meter())

print("\(statistics.endDate.timeIntervalSince1970): distance = \(distance)")

let ret = [

"distance": distance,

"startDate" : statistics.startDate.timeIntervalSince1970 * 1000.0,

"endDate": statistics.endDate.timeIntervalSince1970 * 1000.0

] as [String : Any]

distanceArray.append(ret as NSObject)

}

}

completion(distanceArray, error as NSError?)

}

}

healthKitStore.execute(query)

}

活动卡路里/小时

func activityCalories(_ startDate:NSDate, endDate:NSDate, anchorDate:NSDate, completion: @escaping (Array, NSError?) -> ()) {

let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.activeEnergyBurned)

let interval = NSDateComponents()

interval.hour = 1

let predicate = HKQuery.predicateForSamples(withStart: startDate as Date, end: endDate as Date, options: .strictEndDate)

let query = HKStatisticsCollectionQuery(quantityType: type!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: anchorDate as Date, intervalComponents:interval as DateComponents)

query.initialResultsHandler = { query, results, error in

if let myResults = results{

var caloriesArray: [NSObject] = []

myResults.enumerateStatistics(from: startDate as Date, to: endDate as Date) {

statistics, stop in

if let quantity = statistics.sumQuantity() {

let calories = quantity.doubleValue(for: HKUnit.kilocalorie())

print("\(statistics.endDate.timeIntervalSince1970): calories = \(calories)")

let ret = [

"calories": calories,

"startDate" : statistics.startDate.timeIntervalSince1970 * 1000.0,

"endDate": statistics.endDate.timeIntervalSince1970 * 1000.0

] as [String : Any]

caloriesArray.append(ret as NSObject)

}

}

completion(caloriesArray, error as NSError?)

}

}

healthKitStore.execute(query)

}

我想把所有这些组合成一个对象。

[

{

steps: 70,

distance:10,

calories: 200,

startDate: ...,

endDate: ...,

},...

]

是否有可能直接从HealthKit本身生成具有每小时间隔率的上述格式数据? 如果不可能,我如何将所有3个数据合并到一个对象中,其中数据的范围可以是单日 - 周 - 月。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值