2016-05-31 9 views
0

Ich versuche Benutzerschritte während einer Sitzung zu verfolgen. Diese Sitzungen können zwischen 30 Sekunden und 30 Minuten dauern. Ich beginne die Sitzung und gehe herum und dann höre ich eine Minute später die Sitzung auf. Dies gibt immer 0 Schritte zurück. Hier ist der Code, den ich verwende.iOS HealthKit verfolgen Benutzerschritte während der Sitzung

func readUserSteps(startDate:NSDate, endDate:NSDate) { 

    let weightSampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) 
    let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: .None) 

    let query = HKSampleQuery(sampleType: weightSampleType!, predicate: predicate, limit: 0, sortDescriptors: nil, resultsHandler: { 
     (query, results, error) in 
     if results == nil { 
      print("There was an error running the query: \(error)") 
     } else { 
      var stepCount:Double = 0 
      for steps in results as! [HKQuantitySample] 
      { 
       stepCount += steps.quantity.doubleValueForUnit(HKUnit.countUnit()) 
      } 
      print("Steps Taken: \(stepCount)") 
     } 
    }) 

    self.healthKitStore.executeQuery(query) 
} 

speichere ich das aktuelle Datum als so: let startTime = NSDate() den Beginn einer Sitzung darstellen und sobald der Benutzer stoppt die Sitzung, die ich am Ende der Sitzung als so sparen: let endTime = NSDate(). Ich rufe dann die obige Funktion mit diesen beiden Variablen auf. Leider gibt 'stepCount' immer 0 zurück. Was mache ich hier falsch?

Antwort

1

Wenn Sie nur die vom iPhone oder der Apple Watch aufgezeichneten Benutzerschritte zählen möchten, empfehle ich stattdessen die API CMPedometer, da diese immer die aktuellsten Datensätze enthält. Wenn Sie dennoch HealthKit verwenden möchten, müssen Sie HealthKit mitteilen, dass Ihre App daran interessiert ist, Schritte zu "beobachten", indem Sie einen der Abfragetypen mit einer updateHandler-Eigenschaft (HKObserverQuery, HKStatisticsCollectionQuery oder HKAnchoredObjectQuery) ausführen. Führen Sie eine dieser Abfragen zu Beginn der Sitzung mit einem Update-Handler aus, damit HealthKit Step-Counts häufiger importiert.

HKObserverQuery werden Sie einfach benachrichtigen, wenn in HealthKit neue Schrittzählungen vorhanden sind. Am Ende der Sitzung müssen Sie also erneut nach der Gesamtzahl suchen. Auf der anderen Seite können HKStatisticsCollectionQuery und HKAnchoredObjectQuery Ergebnisse in die App streamen, während die Sitzung ausgeführt wird, was die Leistung verbessern könnte.

Schließlich vorsichtig sein, einfach die Werte von HKQuantitySamples summieren, um die gesamte Schrittzahl zu berechnen. HealthKit-Daten aus mehreren Quellen können sich zeitlich überschneiden. Zum Beispiel könnte ein Apple Watch-Benutzer in HealthKit mehrere Quellen von Schritten für die Tage haben, an denen beide ihre Uhr trugen und ihr Telefon trugen. Aus diesem Grund ist es besser, HKStatisticsQuery oder HKStatisticsCollectionQuery zu verwenden, um eine Summe zu berechnen, da doppelte Überlappungsabtastungen vermieden werden.

Verwandte Themen