我正在制作健康应用程序。我想从Swift中的HealthKit
获取walkingRunningDistance
。但是,我遇到了一个问题。返回值为0.0mile。
为什么返回值是0英里?
我的准则是。
func recentSteps3(completion: (Double, NSError?) -> () ){
let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)
let date = NSDate()
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let newDate = cal.startOfDayForDate(date)
let predicate = HKQuery.predicateForSamplesWithStartDate(newDate, endDate: NSDate(), options: HKQueryOptions.StrictStartDate)
let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) { query, results, error in
var distance: Double = 0
if results?.count > 0
{
for result in results as! [HKQuantitySample]
{
distance += result.quantity.doubleValueForUnit(HKUnit.mileUnit())
}
}
completion(distance, error)
}
healthAuth.healthStore.executeQuery(query)
}
4条答案
按热度按时间k10s72fa1#
您的代码将返回一个值,如果
1.您已向用户请求从HealthKit读取distanceWalkingRunning的权限
1.用户已授予你的应用权限。
如果没有,代码将返回0。
要请求授权,您可以拨打
其中
typesToRead
包含我相信使用HKStatisticsQuery或HKStatisticsCollectionQuery会更有效率。以下是一个例子。
aurhwmvo2#
适用于Swift 4.1
在项目功能中启用HealthKit并将必要的“隐私-健康共享使用说明”键添加到info.plist文件后...
通过将其添加到ViewController.swift(实际上是在viewDidLoad()函数中),确保您正在请求用户的批准。
然后创建getSteps()函数。
dsekswqp3#
上面的方法用于请求访问,下面的方法用于获取计数
}
kuuvgm7e4#
如果返回零,则代码正确。但是,由于代码处于模拟器视图中,模拟器无法读取距离。要读取距离,请转到模拟器中的健康应用程序,然后选择距离步行和跑步距离,然后按添加数据
然后你的应用可能会读取这些数据。