sup*_*org 4 objective-c ios healthkit
目前我正试图用HKStatisticsQuery一段时间间隔来计算步数.我正在通过shaking手机进行测试.但是,似乎我得到的结果不是最近的结果,除非:
Health.app,让它在后台运行,然后在我的应用程序中再次进行测试;UP app,让它在后台运行,然后在我的应用程序中再次进行测试.如果我强制退出Health.app或UP app,我的应用程序将无法再次获取最新数据.因此UP必须做一些我缺少的事情,但我找不到任何"重载"方法HKHealthStore,或者任何相关的选项HKQuery/HKStatisticsQuery.
我正在使用的代码非常简单,如下所示.我想知道是否有任何权限或我遗漏的任何东西.
let predicate = HKQuery.predicateForSamplesWithStartDate(date_start, endDate: NSDate(), options: HKQueryOptions.StrictStartDate)
var type = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)
var query = HKStatisticsQuery(quantityType: type,
quantitySamplePredicate: predicate,
options: .CumulativeSum | .SeparateBySource,
completionHandler: { query, stats, error in ( /*logs here*/ ) })
let healthStore = HKHealthStore()
healthStore.executeQuery(query)
Run Code Online (Sandbox Code Playgroud)
编辑:我也尝试写一些数据,HealthKit但查询没有得到更新.
Edit2:当我说"最近的步骤计数"时,我的意思是:1.执行HKQuery; 摇动手机; 3.再次执行HKQuery.运行上面的代码2次,我总是得到相同的结果,但如果我UP在后台离开Health.app或应用程序,最新的查询得到了更新的结果.
我还尝试调用其他一些API,例如:
healthStore.enableBackgroundDeliveryForType(type, frequency:.Immediate, withCompletion:{
(success:Bool, error:NSError!) -> Void in
let authorized = healthStore.authorizationStatusForType(type)
LF.log("HEALTH callback success", success)
LF.log("HEALTH callback authorized", type)
})
if HKHealthStore.isHealthDataAvailable() == false {
LF.log("HEALTH data not available")
return
} else {
LF.log("HEALTH OK")
}
Run Code Online (Sandbox Code Playgroud)
几乎没有理由,但试图暗中"触发"某种背景刷新.但这些尝试都没有奏效.
All*_*lan 11
HealthKit并不总是具有用户步数和行进距离的最新计数.它会定期导入这些值,这些值实际上来自CoreMotion.framework,并响应某些事件.如果正在运行的应用程序已打开HKObserverQuery,HKStatisticsCollectionQuery则HealthKit会将值传输到客户端,但样本只是上次导入的快照.
因此,如果您希望观察样本类型的更改,则应使用an订阅更新HKObserverQuery,然后再次查询HealthKit以获取最新值.但是,更有效的方法是使用HKStatisticsCollectionQuery具有更新处理程序的更新处理程序,该处理程序将作为匹配谓词的样本的统计信息进行更改.
最后,如果您只对过去7天内的最新步数或最近行程距离感兴趣,那么我建议您考虑直接使用CoreMotion.framework.
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |