Healthkitでランニングデータを取得して監視する

ワークアウトの中の1つであるランニングデータを取得する&監視するための方法について。

HKObserverQueryを実行すると、初回にコールバックが実行されるのでアプリ起動時などの初期のデータ取得に使える。

さらに、定期的にワークアウトデータの監視もしてくれる。いちいちユーザさんが更新ボタンを押す必要がない。

コールバックの中の処理はどうするのかというと、以下の通りHKsampleQueryを実行する。

ワークアウトのデータは、sampleとして返ってくる。

HKObserverクエリーの中でHKSampleクエリーを実行しているのでなんだか不思議な感じがするが、このやり方はAppleの記事でも推奨さている方法である。

The observer query’s update handler does not receive any information about the change—just that a change occurred. You must execute another query, for example an HKSampleQuery or HKAnchoredObjectQuery, to access the changes.

https://developer.apple.com/documentation/healthkit/hkobserverquery/executing_observer_queries

サンプルデータを処理するコードは以下の通り。

要はランニングの時間や距離を配列に入れているだけである。

上記のコードでは、全ワークアウトデータを毎回取得するようにしている。

以下の記事が詳しいが、クエリーを実行した時間を覚えておいて、変化したデータだけ取得するやり方もあるようだ。

https://dmtopolog.com/healthkit-changes-observing/

その場合には、predicateで期間指定する方法やHKAnchoredObjectQueryを使う方法があるらしい。

😀