HealthKitで日別のデータを一度に取得する

2,457 views

Published on

FiNC社開催のpotatotips 23で話した資料です
http://connpass.com/event/21750/

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,457
On SlideShare
0
From Embeds
0
Number of Embeds
784
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

HealthKitで日別のデータを一度に取得する

  1. 1. HealthKitで日別のデー タを一度に取得する @yimajo potatotips 23
  2. 2. <「BMI指数が25以上の方」はご応募をご遠慮頂いております>
  3. 3. 自己紹介 一人で株式会社キュリオシティソフトウェアをやっています 今城 善矩
  4. 4. https://stargzr.net STARGAZER GitHub, Qiita, SlideShare, Stack Overflowの ★数的なものを全部 合計します
  5. 5. https://stargzr.net インタビューされてもいいよという人 を探しています
  6. 6. 本題
  7. 7. 日毎のデータを取得したい • だいたい右図のようなものを やりたがるはず • 期間を決めてデータを取得で きるが日別にクエリを作成す るのは面倒 • データを一気に取得して日毎 に取り出せる
  8. 8. 具体的な説明が少なく て理解に時間がかかる
  9. 9. https://github.com/yimajo/ HealthKitStatisticsCollectionDemo func requestWeakStatisticsCollection() { // 今から一週間前 let calendar: NSCalendar = NSCalendar.currentCalendar() let day = -7 let now = NSDate() let today = calendar.startOfDayForDate(now) // endは今でいい let endDate = now // startはdayを今日から加算した let startDate = calendar.dateByAddingUnit([.Day], value: day, toDate: today, options: NSCalendarOptions.WrapComponents)! // 今日の始まりの0時からアンカーにしたい let anchorDate = today let intervalComponents = NSDateComponents() intervalComponents.day = 1 let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: [.None]) let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)! let statsOptions: HKStatisticsOptions = [HKStatisticsOptions.SeparateBySource, HKStatisticsOptions.CumulativeSum] let query = HKStatisticsCollectionQuery(quantityType: quantityType, quantitySamplePredicate: predicate, options: statsOptions, anchorDate: anchorDate, intervalComponents: intervalComponents) query.initialResultsHandler = { [unowned self] (query, result, error) in guard let result = result where error == nil else{ return } dispatch_async(dispatch_get_main_queue(), { () -> Void in self.statisticsCollection = result self.tableView.reloadData() }) } healthStore.executeQuery(query) }
  10. 10. 前提知識
  11. 11. HKStatistics HKStatistics Δt start end sum, min, max, average
  12. 12. HKStatistics HKStatistics Δt start end sum, min, max, average 歩数 歩数歩数 歩数 歩数
  13. 13. HKStatistics HKStatistics Δt start end sum, min, max, average 歩数 歩数歩数 歩数 歩数  Watch iPhone
  14. 14. HKStatisticsは決められた範 囲のデータを利用しやすく管 理している
  15. 15. これをCollectionとして 連続したデータで一度に 取り出したい
  16. 16. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日
  17. 17. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日 startDateを0時
  18. 18. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日 startDateを0時 endDate
  19. 19. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日 startDateを0時 endDate Δtを1日
  20. 20. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日 startDateを0時 endDate Δtを1日 HKStatistics
  21. 21. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日 startDateを0時 endDate Δtを1日 anchorDateを0時にセット HKStatistics
  22. 22. 例:22日から現在まで歩数を一度に取得する設定 今24日23日22日 startDateを0時 endDate Δtを1日 anchorDateを0時にセット HKStatistics ⚓
  23. 23. 例:22日から現在まで歩数を一度に取得する設定 HKStatisticsHKStatistics HKStatistics 今24日23日22日 startDateを0時 endDate Δtを1日 anchorDateを0時にセット HKStatistics ⚓
  24. 24. 例:22日から現在まで歩数を一度に取得する設定 HKStatisticsHKStatistics HKStatistics 今24日23日22日 sum 2,084歩 sum 4,376歩 sum 444歩 startDateを0時 endDate Δtを1日 anchorDateを0時にセット HKStatistics ⚓
  25. 25. 補足
  26. 26. anchorDateについて • NSDateクラスだがΔtを一日 にした場合は0:00から23:59 の間の何時何分か分かればい い • 例では22日0:00にしたが23 日0:00でも結果は同じ ⚓
  27. 27. ソース別重複データ • statistics.sumQuantity()は既に 重複データを省いている=同時刻 の別ソースのデータは合計してい ない • statistics.sumQuantityForSour ce(source:)ではソース別のデー タが取れる • .SeparateBySourceはソース別 でデータを取得したいかどうかを クエリに渡すオプション 歩数 歩数歩数 歩数 歩数  Watch iPhone
  28. 28. 参考 • http://azu.github.io/slide/tech_ios/ • https://developer.apple.com/videos/play/ wwdc2014-203/ • https://developer.apple.com/library/ prerelease/ios/documentation/HealthKit/ Reference/HealthKit_Framework/index.html

×