2016-04-11 3 views
4

My Swift iOSアプリはHealthKitと接続して、これまでに行ったステップの数をユーザーに表示します。ほとんどの場合、これは成功です。ステップの唯一のソースがiPhoneの内蔵歩数計機能で記録されたステップであれば、すべて正常に動作し、アプリで表示される歩数は健康アプリのステップ数と一致します。しかし、私の個人的なiPhoneに複数のデータソースがある場合、私のPebble TimeスマートウォッチとiPhoneの歩数計はどちらもHealthへのステップをフィードしてくれます。 iOS Healthアプリは、iPhoneとPebbleの両方が60秒ごとにHealthにステップしているので、重複した手順を実行しますが、正確な1日の歩数を表示しますが、私のアプリがHealthKitから取得するデータには、ソースが大幅に不正確になります。HealthがHealthKit-swiftとは異なる複数のステップソースを処理する

ステップカウントが正確なHealthアプリケーションの最終結果を、HealthKitの過膨張データのストリームに取り込むのではなく、どのようにすればよいですか?

UPDATE:ここで私は毎日の健康データを取得するために使用したコードです:

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) 
    } 
+0

ユーザーが使用しているステップ数の計算方法を示すコードスニペットを含めてください。どのような種類のクエリを使用していますか? – Allan

+0

@Allan私はユーザーのステップを計算するために使用するコードを含めるように質問を更新しました。 – owlswipe

答えて

8

あなたのコードは、それが単にHKSampleQueryの結果を加算するので、オーバーカウントステップです。サンプルクエリは、複数のソースからの重複サンプルを含む、指定された述部に一致するすべてのサンプルを返します。 HKSampleQueryを使用してユーザーのステップ数を正確に計算したい場合は、重複するサンプルを検出して数えないようにする必要があります。これは面倒で困難です。

健全性HKStatisticsQueryおよびHKStatisticsCollectionQueryを使用して集計値を計算します。これらのクエリは、あなたの合計(および他の集計値)を計算し、効率的に実行します。もっとも重要なのは、オーバーカウントすることを避けるために、オーバーラップするサンプルを重複排除することです。

documentation for HKStatisticsQueryにはサンプルコードが含まれています。

+0

ありがとう! HKStatisticsQueryについてもう少し詳しく知ることができますか?たぶんコードサンプルやチュートリアルへのリンク(私はGoogleを検索し、かなりまばらです)? – owlswipe

+0

リファレンスドキュメントのサンプルコードを調べてみましたか? https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HKStatisticsQuery_Class/ – Allan

関連する問題