Приложение My Swift для iOS подключается к HealthKit, чтобы показать пользователю, сколько шагов он сделал за день. По большей части это удается. Когда единственным источником шагов являются шаги, записанные встроенной функцией шагомера iPhone, все работает нормально, и количество шагов, показываемое моим приложением, совпадает с количеством шагов в приложении Health. Однако, когда есть несколько источников данных - на моем личном iPhone, моих умных часах Pebble Time и шагомере iPhone оба передают шаги в Health, - мое приложение сходит с ума, записывая все шаги с обоих. В то время как приложение iOS Health исключает повторяющиеся шаги (что оно может делать, потому что и мой iPhone, и мой Pebble сообщают о шагах в Health каждые 60 секунд) и показывают точное ежедневное количество шагов, данные, которые мое приложение получает из HealthKit, включают все шаги из обоих источники, вызывающие большие неточности.
Как я могу получить доступ к окончательному результату приложения Health с точным подсчетом шагов, вместо того, чтобы подключаться к потоку завышенных данных HealthKit о шагах?
ОБНОВЛЕНИЕ. Вот код, который я использую для ежедневного получения данных о состоянии здоровья:
func recentSteps2(completion: (Double, NSError?) -> () )
{
checkAuthorization() // checkAuthorization just makes sure user is allowing us to access their health data.
let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) // The type of data we are requesting
let date = NSDate()
let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let newDate = cal.startOfDayForDate(date)
let predicate = HKQuery.predicateForSamplesWithStartDate(newDate, endDate: NSDate(), options: .None) // Our search predicate which will fetch all steps taken today
// The actual HealthKit Query which will fetch all of the steps and add them up for us.
let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in
var steps: Double = 0
if results?.count > 0
{
for result in results as! [HKQuantitySample]
{
steps += result.quantity.doubleValueForUnit(HKUnit.countUnit())
}
}
completion(steps, error)
}
storage.executeQuery(query)
}