Как заставить HKQuery загружать последние шаги?
В настоящее время я пытаюсь использовать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)
Изменить: я также пытался записать некоторые данные вHealthKit
но запрос не обновляется.
Edit2: когда я сказал «количество последних шагов», я имел в виду что-то вроде: 1. выполнить HKQuery; 2. встряхнуть телефон; 3. выполнить HKQuery снова. Выполнение приведенного выше кода 2 раза, и я всегда получаю одинаковые результаты, но если я покину Health.app илиUP
приложение в фоновом режиме, последний запрос получил обновленные результаты.
Я также пытался вызвать некоторые другие 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")
}
Почти без причины, но попытайтесь тайно «вызвать» какое-то фоновое обновление. Но ни одна из этих попыток не сработала.