Meine Swift iOS-App stellt eine Verbindung mit HealthKit her, um dem Benutzer anzuzeigen, wie viele Schritte er bis zu diesem Tag gemacht hat. In den meisten Fällen ist dies erfolgreich. Wenn die einzige Schrittquelle Schritte sind, die von der integrierten Schrittzählerfunktion des iPhones aufgenommen wurden, funktioniert alles einwandfrei und die von meiner App angezeigte Schrittanzahl stimmt mit der Schrittanzahl der Health-App überein. Wenn jedoch mehrere Datenquellen - auf meinem persönlichen iPhone - vorhanden sind, führen meine Pebble Time-Smartwatch und der Schrittzähler des iPhones beide Schritte zur Gesundheit - meine App läuft durch und zeichnet alle Schritte von beiden auf. Während die iOS Health App doppelte Schritte durchläuft (was möglich ist, weil sowohl mein iPhone als auch mein Pebble-Bericht alle 60 Sekunden auf "Gesundheit" gehen) und eine genaue tägliche Schrittzahl zeigt, enthalten die Daten, die meine App von HealthKit bezieht, alle Schritte von beiden Quellen, die große Ungenauigkeiten verursachen.Gesundheit behandelt mehrstufige Quellen anders als HealthKit-swift
Wie kann ich das Endergebnis der Health-App abrufen, in dem die Schrittanzahl korrekt ist, anstatt den überladenen Schritt von HealthKit zu verwenden?
UPDATE: Hier ist der Code, den ich täglich Gesundheitsdaten zu erhalten verwenden:
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)
}
Bitte fügen Sie ein Code-Snippet ein, das zeigt, wie Sie die Anzahl der Schritte berechnen, die der Benutzer unternimmt. Welche Art von Abfrage verwenden Sie? – Allan
@Allan Ich habe meine Frage aktualisiert, um den Code einzubeziehen, mit dem ich die Schritte des Benutzers berechne. – owlswipe