В момента се опитвам да използвам 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")
}
Почти без причина, но се опитайте тайно да „задействате“ някакъв вид опресняване на фона. Но нито един от тези опити не успя.