2016-08-10 7 views
0

Я использую набор для здоровья в своем приложении для чтения шагов и действий пользователя. Все это в порядке, но я хочу читать только автоматически обнаруженные действия и шаги. В настоящее время я получаю всю погоду данных, которую он вручную ввел или автоматически обнаружил с помощью приложения работоспособности. Это мой код до сих порПолучение только событий AutoDetected от healthkit

Но где и как я могу проверить, был ли введен пользователь или введен автоматически? Я видел This Вопрос, но, но его в объективе-c, и я не смог его полностью понять, поэтому, пожалуйста, посоветуйте мне об этом.

+0

Возможная Дубликат [Игнорировать ручную запись из Apple Health приложения в качестве источника данных] (http://stackoverflow.com/questions/31184628/ignore-manual-entries-from-apple-health-app-as- data-source) – Allan

+0

Это решение устарело, но не работает. – Byte

+0

Не могли бы вы объяснить, почему это устарело? – Allan

ответ

0

Я решил проблему самостоятельно. Вот как я это сделал.

func todaySteps(completion: (Double, NSError?) ->()) 
{ 
    let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) 

    let date = NSDate() 
    print(date) 
    let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let newDate = cal.startOfDayForDate(date) 
    print(newDate) 
    let predicate = HKQuery.predicateForSamplesWithStartDate(newDate, endDate: NSDate(), options: .None) 

    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] 
      { 
       print("Steps \(result.quantity.doubleValueForUnit(HKUnit.countUnit()))") 

       // checking and truncating manually added steps 
       if result.metadata != nil { 
        // Theses steps were entered manually 
       } 
       else{ 
        // adding steps to get total steps of the day 
        steps += result.quantity.doubleValueForUnit(HKUnit.countUnit()) 
       } 

      } 
     } 
     completion(steps, error) 
    }  
    executeQuery(query) 
}