Wear OS デバイス間でのアプリの互換性を強化する

Wear Health Services API(WHS)は、健康とフィットネスのデベロッパーに一貫した統合サーフェスを提供しており、すべての Wear OS 3 以上を搭載したデバイスに必須のコンポーネントとなっています。デバイス間の互換性を維持し、ユーザー エクスペリエンスの問題を回避するために、多くのデバイスとその機能の違いに合わせて適切に調整するようにアプリを作成します。そのためには、アプリで使用するクライアントについてのみ依存関係を宣言します。また、オプションの高度な指標を利用可能かどうかに基づいて表示または削除する柔軟性をアプリに持たせます。

さまざまなセンサーが、基盤のハードウェアとセンサー プラットフォームに基づいて、デバイスごとに異なるさまざまな頻度でデータを生成します。たとえば、デバイスがあるタイムスタンプで心拍数を返し、別のタイムスタンプで位置情報を返すことがあります。異なるタイムスタンプまたは重複するタイムスタンプで独立したデータ ストリームを受信できるアプリを作成します。

このガイドでは、Wear ヘルスサービス内のさまざまなクライアントでサポートされている、想定される動作とデータ型について説明します。

エクササイズ クライアント

以下のセクションでは、ExerciseClient の想定される動作とデータ型について説明します。

想定される動作

ExerciseClient の場合、一部のエクササイズ タイプは、特定のデータ型が利用可能かどうかに依存します。たとえば、車椅子エクササイズは、車椅子漕ぎに対応している場合にのみ利用できます。これらのオプションは、特定のデバイスで利用可能かどうかに基づいて有効または無効にします。

ほとんどのエクササイズ データ型は 1 秒間隔でサンプリングされて配信されますが、一部例外があります。

  • 状況によっては、一部のエクササイズ データ型が 1 秒間に 1 回以上更新されることがあります。たとえば、ユーザーが走っているときは、歩数が 1 秒間に 1 回以上更新されます。
  • 一部のデータ型では、現在の値が以前の値と異なる場合にのみ更新が配信されます。

データ配信は、ストリーミングとバッチのいずれかです。データはアプリ プロセッサがオンになっている間(通常はディスプレイがオンでインタラクティブなとき)ストリーミングされます。ディスプレイがオフになるか、常に画面表示モード(ディスプレイがオンだがインタラクティブではない)になると、バッテリーを節約するためにデータがバッチ処理されます。バッチ処理されたデータは、スマートウォッチが常に画面表示モードでなくなったためにアプリ プロセッサが再びオンになったとき、またはバッチ処理のバッファがいっぱいになったとき、アプリに配信されます。これはデバイスによって異なります。デバイスが常に画面表示モードになっている間はサンプリング レートが変わらないため、配信されるバッチのデータポイントは頻度が高いままとなります。

データ型は、もっぱらスマートウォッチのセンサーが生成したデータに由来します。たとえば、位置情報はすべてスマートウォッチに由来するもので、スマートフォンのものではありません。

データ型

ExerciseClient API を使用すると、個別のタイプのワークアウトを開始、一時停止、再開、停止できます。WHS はエクササイズごとに、そのエクササイズ タイプで利用可能なデータ型を定義しています。特定のエクササイズに必要のないセンサーはオンにならないため、バッテリーを節約でき、アプリのロジックを簡素化できます。たとえば、ランニングを始めた場合、位置情報は屋外でのランニングについてのみ提供され、追跡されます。サイクリングのエクササイズを始めた場合、歩数の提供や追跡はされません。以降のセクションでは、ExerciseClient でサポートされているデータ型について説明します。

保証されるエクササイズ データ型

以下のエクササイズ データ型は、すべてのデバイスで利用できます。

  • サンプルデータ型には対応する _STATS データ型があり、エクササイズの最小値、最大値、平均値を返します。たとえば、PACE のデータは PACE_STATS データ型で取得できます。
  • インターバル データ型には対応する _TOTAL データ型があり、エクササイズの累積値を返します。たとえば、DISTANCE のデータは、DISTANCE_TOTAL データ型で取得できます。
指標 想定されるデータ 想定される動作に関する注意事項
HEART_RATE_BPM 1 分あたりの心拍数 [データ型: Double] どのデバイスも、エクササイズ中に心拍数を毎秒 1 回サンプリングします。一部のデバイスは 1 秒ごとに BPM 値を報告します。デバイスによっては、前回の値から変化した場合にのみ BPM 値を報告するものもあります。すべてのデバイスで BPM 値を 1 秒ごとに受け取ることは想定しないでください。
LOCATION 緯度と経度 [データ型: Double] 位置情報はスマートウォッチの GPS のみに基づいています。Fused Location Provider やその他の Android サービスから位置情報を得ることは想定しないでください。各データポイントには、精度値(水平位置誤差ともいいます)と可用性も含まれます。
STEPS [データ型: Long] 歩数は、エクササイズの継続期間(エクササイズを一時停止している時間は含まれません)における積算合計です。
DISTANCE メートル [データ型: Double] 利用可能な場合は GPS ベースの位置情報から、それ以外の場合は歩数から算出します。合計とは、エクササイズの継続期間(エクササイズを一時停止している時間は含まれません)における合計を指します。
SPEED [メートル / 秒] [データ型: Double] 最小値、最大値、平均値を返します。エクササイズの継続期間(エクササイズを一時停止している時間は含まれません)における値です。
PACE [秒 / メートル] [データ型: Double] 速度が 0 の場合、デフォルト値は 0 です。平均は、エクササイズの継続期間(エクササイズを一時停止している時間は含まれません)における値です。
ELEVATION_GAIN メートル[データ型: Double] 標高の正の変化。合計は、エクササイズの継続期間(エクササイズを一時停止している時間は含まれません)における値が報告されます。
TOTAL_CALORIES kCal [データ型: Double] 活動消費カロリーを基礎代謝量に足したもの。ここで出されるカロリーは、システム設定で指定したユーザーの身長、体重、年齢、性別を考慮しています。カロリーは、アプリで収集したユーザー プロフィール データを考慮しません。報告される合計は、エクササイズの継続期間(エクササイズを一時停止している時間は含まれません)における値です。

オプションのエクササイズ データ型

次のデータ型リストは、特定のデバイスでのみ利用できます。DataTypes の完全なリストについては、Jetpack のリファレンスをご覧ください。前述の「必須 / 保証」リストに DataType がない場合は、オプションです。

オプションのデータ型の例を以下に示します。このリストはすべてを網羅したものではありません。

指標 想定されるデータ 想定される動作に関する注意事項
ABSOLUTE_ELEVATION [データ型: Double]
ELEVATION_LOSS メートル [データ型: Double] 標高の負の変化。値は正です。たとえば標高が 1m 下がった場合は、-1 ではなく 1 が返されます。
STEPS_PER_MINUTE [データ型: Long]
WHEELCHAIR_PUSHES [データ型: Long] 車椅子を漕いだ回数。車椅子ベースのエクササイズで使用します。
REP_COUNT [データ型: Long]
SWIM_STROKE_COUNT [データ型: Long]
SWIM_LAP_COUNT [データ型: Long]

エクササイズごとのデータ型

エクササイズ タイプごとに異なるデータ型が返されます。返されるデータ型は、エクササイズのニーズに合致するものです。たとえば、BIKING エクササイズ タイプは STEPS データ型を返しません。ユーザーのデバイスでサポートされているデータ型については、実行時に Capabilities メソッドを使用して確認してください。

少なくとも、心拍数とカロリーのデータはすべてのエクササイズ タイプで返されます。エクササイズによっては、要件に応じて追加のデータ型がサポートされることがあります。

いくつか例を示します。

  • 瞑想やピラティスなどのエクササイズは、心拍数とカロリーのみをサポートします。
  • バスケットボールやバドミントンなどのエクササイズは、心拍数、カロリー、距離、歩数をサポートします。
  • ウォーキングやランニングなどのエクササイズは、心拍数、カロリー、距離、歩数、速度、ペースをサポートします。
  • 水泳は、心拍数、カロリー、距離、ラップ数をサポートします。

パッシブ モニタリング クライアント

心拍数や歩数などの健康に関するデータを受動的にモニタリングするアプリをサポートするには、すべての Wear OS 搭載デバイスで以下のデータ型が必要となります。これらのデータ型はそれぞれ、もっぱらスマートウォッチのセンサーが生成したデータに由来するものである必要があります。

想定される動作

バッテリーを節約するために、パッシブ モニタリングで得たセンサー測定値は MCU に保存され、ヘルスサービスにバッチ処理されます。このバッチ処理の結果は、システムの動作に応じて異なる間隔で返されます。たとえば、センサーのバッファがいっぱいになったときや、ユーザーがディスプレイを操作したときに、バッチが返されます。

データ型に、事前定義された、または予測可能なバッチ処理間隔は想定しないでください。

パッシブ モニタリングのデータ型

指標 想定されるデータ 注意事項
HEART_RATE_BPM 1 分あたりの心拍数 [データ型: Double] デバイスが、異なる間隔で心拍数の測定値を返すことがあります。1 秒ごとに読み取りを行うデバイスもあれば、10 分ごとに読み取りを行うデバイスもあります。こうした間隔はアプリでは利用できません。アプリは、異なるサンプリング間隔に適切に対応する必要があります。
STEPS_DAILY/STEPS [データ型: Long] 1 日の歩数は、WHS が深夜 0 時にトリガーする最後のリセット以降に発生した歩数の合計です。これには、アクティブなエクササイズが一時停止している間に発生した歩数も含まれます。歩数は、最後のチェック以降の細かい差分になります。
Distance_DAILY/Distance メートル [データ型: Double] 加速度計、歩数から算出します。位置情報サービスをオフにしているユーザーでも正確な歩数を受け取れるようにするために、GPS を使用した計算は行わないでください。
SPEED [メートル / 秒] [データ型: Double]
1 日のカロリー kCal [データ型: Double] 活動消費カロリーと BMR を含む一日のカロリー。ここで出されるカロリーの数値は、システム設定で指定したユーザーの身長、体重、年齢、性別を考慮しています。カロリーは、アプリが収集したユーザー プロフィール データに応じて調整されるわけではありません。
RUNNING_STEPS(オプション) [データ型: Long] エクササイズ中とそれ以外のときの歩数の差分。両方を同時にトラッキングします。
WALKING_STEPS(オプション) [データ型: Long]
ELEVATION_GAIN メートル [データ型: Double] 標高の正の差分のみが含まれます。
ELEVATION_LOSS メートル [データ型: Double] 標高の負の差分のみが含まれます。
1 日の階数 [データ型: Double] 「一部の」階数を表すことができます。

パッシブ モニタリングの 1 日の目標

指標 想定されるデータ
歩数_毎日 [データ型: Long] 1 日の歩数(アクティブなエクササイズが一時停止している間に発生した歩数も含まれます)は、最後のリセット以降に発生した歩数の合計です。リセットは WHS が深夜 0 時に行います。
1 日の階数 [データ型: Double] 階段の「一部の」階数を表すことができます。
1 日のカロリー kCal [データ型: Double] 活動消費カロリーと BMR を含む一日のカロリー。
Distance_DAILY(毎日) メートル [データ型: Double] 加速度計または歩数から算出します。位置情報サービスをオフにしているユーザーでも正確な歩数を受け取れるよう、GPS を使用した計算は行わないでください。
DAILY_ELEVATION_GAIN メートル [データ型: Double] 標高の正の差分のみが含まれます。

MeasureClient

MeasureClient を使用して、任意の時点での心拍数を測定します。

想定される動作

MeasureClientPassiveClient はいくつかの点で類似しています。どちらもエクササイズとは無関係の、バッチ以外の健康に関するデータを提供します。両方を使用して心拍数を測定できますが、主な違いは、MeasureClient には心拍数データの可用性が含まれ、PassiveClient には可用性情報が含まれない点です。

データ型

指標 想定されるデータ 注意事項
HEART_RATE_BPM 1 分あたりの心拍数 [データ型: Double] 可用性も含まれます。

サポートされる機能

エクササイズ データ型とパッシブ モニタリング データ型に加えて、デバイスは、エクササイズの開始などのイベントをトリガーしたり、睡眠と覚醒などの状態を測定したりといったその他の機能をサポートしています。これらの機能は、すべてのデバイスに存在するものもあれば、一部のデバイスにしか存在しないものもあります。

イベント トリガー

どのデバイスも、次の一般的なトリガーをサポートしています。

  • 距離と歩数の 1 日の目標
  • 歩数、距離、期間のエクササイズ目標

デバイスによっては、さらに高度なイベント トリガーがサポートされている場合があります。次に例を示します。

  • 水泳のラップ数
  • 消費カロリーのエクササイズ目標
  • 瞬間速度のエクササイズ目標

状態

どのデバイスも、基本的な状態機能をサポートしています。状態機能とは、ユーザーが現在アクティブなエクササイズをしているかどうかを指します。

デバイスによっては、その他の状態機能が提供される場合があります。その他の状態機能には、エクササイズが自動一時停止または自動再開されたかどうかの検出や、ユーザーが起きているか寝ているかの検出などがあります。

パッシブ モニタリングでの健康に関するアラート

一部のデバイスは健康に関するアラートをサポートしています。これらの機能は、一部のデバイスではサポートされていません。健康に関するアラートには、心拍数の異常の検出や転倒の検出などがあります。