Wear OS 기기 전체에서 앱 호환성 개선

Wear Health Services API(WHS)는 Wear OS 3 및 이후 버전을 실행하는 모든 기기의 필수 구성요소입니다. WHS는 건강 및 피트니스 개발자에게 일관된 통합 노출 영역을 제공하기 때문입니다. 기기 간 호환성을 유지하고 사용자 환경 문제를 방지하기 위해 앱을 다양한 기기와 서로 다른 기능에 적절하게 조정되도록 빌드합니다. 이렇게 하려면 앱에서 사용하는 클라이언트의 종속 항목만 선언합니다. 또한 앱에서는 가용성에 따라 유연하게 선택적 고급 측정항목을 표시하거나 삭제할 수 있어야 합니다.

서로 다른 센서는 기본 하드웨어 및 센서 플랫폼에 따라 기기마다 다른 주파수에서 데이터를 생성합니다. 예를 들어 기기는 한 타임스탬프에서 심박수를, 다른 타임스탬프에서 위치를 반환할 수 있습니다. 서로 다른 타임스탬프 또는 겹치는 타임스탬프에서 독립적인 데이터 스트림을 수신할 수 있는 앱을 만듭니다.

이 가이드에서는 Wear 건강 관리 서비스의 다양한 클라이언트에서 지원하는 예상 동작과 데이터 유형을 설명합니다.

운동 클라이언트

다음 섹션에서는 ExerciseClient의 예상 동작과 데이터 유형을 설명합니다.

예상 동작

ExerciseClient의 경우 일부 운동 유형은 특정 데이터 유형의 가용성에 따라 달라집니다. 예를 들어 휠체어 운동은 휠체어 밀기가 지원되는 경우에만 사용할 수 있습니다. 특정 기기에서의 사용 가능 여부에 따라 이러한 옵션을 사용 설정 및 중지합니다.

대부분의 운동 데이터 유형은 1초 간격으로 샘플링 및 전송됩니다. 단, 다음과 같은 몇 가지 예외가 있습니다.

  • 상황에 따라 일부 운동 데이터 유형은 초당 2회 이상 업데이트됩니다. 예를 들어 사용자가 뛰고 있는 경우 걸음 수는 초당 2회 이상 업데이트됩니다.
  • 일부 데이터 유형에서는 현재 값이 이전 값과 다른 경우에만 업데이트가 전송됩니다.

데이터 전송은 스트리밍되거나 일괄 처리될 수 있습니다. 데이터는 애플리케이션 프로세서가 켜져 있는 동안(일반적으로 디스플레이가 켜져 있고 대화형일 때) 스트리밍됩니다. 디스플레이가 꺼져 있거나 대기 모드(하지만 대화형은 아님)로 전환되면 데이터는 전원 절약을 위해 일괄 처리됩니다. 시계가 대기 모드에서 해제되거나 일괄 처리를 위한 버퍼가 가득 찼을 때 애플리케이션 프로세서가 다시 켜지면 일괄 처리된 데이터가 애플리케이션에 전송됩니다. 이는 기기에 따라 다릅니다. 기기가 대기 모드에 있는 동안 샘플링 레이트는 동일하게 유지되므로 전송되는 배치는 여전히 빈도가 높은 데이터 포인트를 갖습니다.

데이터 유형은 시계의 센서에 의해 생성된 데이터에서만 파생됩니다. 예를 들어 위치 데이터는 휴대전화가 아닌 시계에서 전적으로 발생합니다.

데이터 유형

ExerciseClient API를 사용하면 서로 다른 유형의 운동을 시작, 일시중지, 재개, 중지할 수 있습니다. 운동마다 WHS는 관련 운동 유형에 사용할 수 있는 데이터 유형 집합을 정의합니다. 이렇게 하면 지정된 운동에 필요하지 않은 센서는 켜지지 않으므로 전원이 절약되고 앱 로직이 간소화됩니다. 예를 들어 달리기를 시작하면 야외 달리기의 위치 데이터만 제공되고 추적됩니다. 자전거 타기 운동을 시작할 때는 걸음 수가 제공되거나 추적되지 않습니다. 다음 섹션에서는 ExerciseClient에서 지원되는 데이터 유형을 설명합니다.

보장된 운동 데이터 유형

모든 기기에서 사용할 수 있는 운동 데이터 유형은 다음과 같습니다.

  • 샘플 데이터 유형에는 운동의 최솟값, 최댓값, 평균값을 반환하는 _STATS 데이터 유형이 있습니다. 예를 들어 PACE 통계는 PACE_STATS 데이터 유형으로 가져올 수 있습니다.
  • 간격 데이터 유형에는 운동의 누적 값을 반환하는 _TOTAL 데이터 유형이 있습니다. 예를 들어 DISTANCE 통계는 DISTANCE_TOTAL 데이터 유형으로 가져올 수 있습니다.
측정항목 예상 데이터 예상 동작 참고사항
HEART_RATE_BPM 분당 심박수 [데이터 유형: Double] 모든 기기는 운동 중 1초에 한 번 심박수를 샘플링합니다. 일부 기기는 매초 BPM 값을 보고합니다. BPM이 이전 값 이후 변경된 경우에만 BPM을 보고하는 기기도 있습니다. 모든 기기에서 1초 간격으로 BPM 값을 수신하지는 않습니다.
LOCATION 위도 및 경도 [데이터 유형: Double] 위치 데이터는 시계 GPS만을 기반으로 합니다. 위치 데이터가 통합 위치 정보 제공자 또는 다른 Android 서비스에서 생성되지는 않습니다. 각 데이터 포인트에는 정확도 값(가로 위치 오류라고도 함)과 가용성도 포함되어 있습니다.
STEPS [데이터 유형: Long] 걸음 수는 운동 시간 동안 누계로 계산되며 운동이 일시중지된 시간은 포함되지 않습니다.
DISTANCE 미터 [데이터 유형: Double] 가능한 경우 GPS 기반 위치에서 계산되고, 그렇지 않은 경우 걸음 수에서 계산됩니다. 총계는 운동이 일시중지된 시간을 제외한 운동 시간 동안의 누계를 나타냅니다.
SPEED [미터/초] [데이터 유형: Double] 최솟값, 최댓값, 평균값을 반환합니다. 운동 시간 동안의 값입니다. 여기에는 운동이 일시중지된 시간은 포함되지 않습니다.
PACE [초/미터] [데이터 유형: Double] 속도가 0이면 기본값은 0입니다. 평균은 운동이 일시중지된 시간을 제외한 운동 시간 동안의 값입니다.
ELEVATION_GAIN 미터 [데이터 유형: Double] 양의 고도 변화. 운동 시간 동안의 총계가 보고됩니다. 여기에는 운동이 일시중지된 시간은 포함되지 않습니다.
TOTAL_CALORIES kCal [데이터 유형: Double] 기초 대사율에 추가되는 활동 칼로리 소모량입니다. 여기에서 연소된 칼로리는 시스템 설정에 지정된 대로 사용자의 키, 체중, 연령 및 성별을 고려합니다. 칼로리는 앱에서 수집된 사용자 프로필 데이터를 고려하지 않습니다. 보고되는 총 칼로리는 운동이 일시중지된 시간을 제외한 운동 시간 동안의 값입니다.

운동 데이터 유형(선택사항)

다음 데이터 유형 목록은 특정 기기에서만 사용 가능합니다. DataType의 전체 목록은 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를 실행하는 모든 기기에서 심박수와 걸음 수와 같은 건강 데이터를 수동적으로 모니터링하는 앱을 지원하려면 다음 데이터 유형이 필요합니다. 이러한 각 데이터 유형은 시계 센서에 의해 생성된 데이터에서만 파생되어야 합니다.

예상 동작

전원 소비를 줄이기 위해 Passive Monitoring으로 얻은 센서 측정값은 MCU에 저장되고 건강 관리 서비스에 일괄 처리됩니다. 그러한 배치는 시스템 동작에 따라 서로 다른 간격으로 반환됩니다. 센서 버퍼가 가득 차거나 사용자가 디스플레이와 상호작용할 때 배치가 반환되는 예가 여기에 속합니다.

모든 데이터 유형에 사전 정의되거나 예측 가능한 일괄 처리 간격이 사용될 것으로 가정하지 마세요.

수동적 모니터링 데이터 유형

측정항목 예상 데이터 참고
HEART_RATE_BPM 분당 심박수 [데이터 유형: Double] 기기는 심박수 측정값을 다양한 간격으로 반환할 수 있습니다. 일부 기기는 1초마다 측정값을 가져올 수 있습니다. 그 외 기기는 10분마다 측정값을 가져올 수 있습니다. 간격은 앱에서 설정 가능하지 않습니다. 앱은 다양한 샘플링 간격에 맞게 적절하게 조정되어야 합니다.
STEPS_DAILY/STEPS [데이터 유형: Long] 일일 걸음 수는 마지막 초기화 이후에 걸은 총 걸음 수로, 자정에 WHS에서 트리거됩니다. 여기에는 진행 중인 운동이 일시중지된 동안의 걸음 수가 포함됩니다. 걸음 수는 마지막 검사 이후의 세분화된 델타입니다.
DISTANCE_DAILY/DISTANCE 미터 [데이터 유형: Double] 가속도계/걸음 수에서 계산됩니다. 위치 서비스를 끈 사용자가 정확한 걸음 수를 계속 얻을 수 있도록 GPS를 사용하여 계산하지 마세요.
SPEED [미터/초] [데이터 유형: Double]
CALORIES_일일 kCal [데이터 유형: Double] 활성 칼로리, BMR을 포함한 일일 칼로리입니다. 여기에서 연소된 칼로리 수치는 시스템 설정에 지정된 대로 사용자의 키, 체중, 연령 및 성별을 고려합니다. 앱에서 수집된 사용자 프로필 데이터에 따라 칼로리가 조정되지는 않습니다.
RUNNING_STEPS(선택사항) [데이터 유형: Long] 운동 중인 경우와 그 밖의 상태에서 모두 진행된 걸음 수의 델타. 두 가지를 동시에 추적합니다.
WALKING_STEPS(선택사항) [데이터 유형: Long]
ELEVATION_GAIN 미터 [데이터 유형: Double] 고도의 양의 델타만 포함됨
ELEVATION_LOSS 미터 [데이터 유형: Double] 고도의 음의 델타만 포함
일일 층수 [데이터 유형: Double] '일부' 층으로 표시될 수 있습니다.

수동적 모니터링 일일 목표

측정항목 예상 데이터 참고
일일 걸음 수 [데이터 유형: Long] 진행 중인 운동이 일시중지된 동안의 걸음 수도 포함되는 일일 걸음 수는 마지막 초기화 이후의 총 걸음 수입니다. WHS는 자정에 초기화됩니다.
일일 층수 [데이터 유형: Double] 계단의 '일부' 층으로 나타낼 수 있습니다.
CALORIES_일일 kCal [데이터 유형: Double] 활성 칼로리와 BMR이 포함된 일일 칼로리입니다.
일일 DISTANCE_DAILY 미터 [데이터 유형: Double] 가속도계 또는 걸음 수에서 계산됩니다. 위치 서비스를 끈 사용자가 정확한 걸음 수를 계속 얻을 수 있도록 GPS를 사용하여 이를 계산해서는 안 됩니다.
DAILY_ELEVATION_GAIN 미터 [데이터 유형: Double] 고도의 양의 델타만 포함됨

MeasureClient

MeasureClient를 사용하여 특정 순간의 심박수를 측정합니다.

예상 동작

어떤 면에서 MeasureClientPassiveClient는 비슷합니다. 두 개 모두 운동과 관련 없는 비 일괄 처리 건강 통계를 제공합니다. 두 가지를 모두 사용하여 심박수를 측정할 수 있지만, 주요 차이점은 MeasureClient에는 심박수 데이터 가용성 정보가 포함되지만 PassiveClient에는 가용성 정보가 포함되지 않는다는 점입니다.

데이터 유형

측정항목 예상 데이터 참고
HEART_RATE_BPM 분당 심박수 [데이터 유형: Double] 가용성도 포함됨

지원되는 기능

운동 데이터 유형 및 수동 모니터링 데이터 유형 외에도 기기는 운동 시작과 같은 이벤트를 트리거하는 추가 기능과 잠든 상태와 깨어 있는 상태 등을 비교한 통계를 측정하는 추가 기능을 지원합니다. 이러한 기능 중에는 모든 기기에 있는 기능도 있고 특정 기기에만 있는 기능도 있습니다.

이벤트 트리거

모든 기기는 다음과 같은 일반적인 트리거를 지원합니다.

  • 거리 및 걸음 수의 일일 목표
  • 걸음 수, 이동 거리, 지속 시간과 관련된 운동 목표

특정 기기에서는 이보다 고급 이벤트 트리거를 지원할 수도 있습니다. 몇 가지 예는 다음과 같습니다.

  • 수영 시 랩 카운트
  • 칼로리 소모량과 관련된 운동 목표
  • 순간 속도와 관련된 운동 목표

상태

모든 기기는 기본 상태 기능을 지원합니다. 상태 기능은 사용자가 현재 운동 중인지를 나타냅니다.

특정 기기에서는 추가 상태 기능을 제공할 수 있습니다. 운동이 자동 일시중지되었거나 자동으로 재개되었는지 또는 사용자가 깨어 있거나 잠든 상태인지 감지하는 기능이 추가 상태 기능에 해당합니다.

수동 모니터링의 건강 상태 알림

일부 기기에서는 건강 상태 알림을 지원합니다. 이러한 기능은 모든 기기에서 지원되지는 않습니다. 심박수 이상 감지 또는 넘어짐 감지 등이 건강 상태 알림에 해당합니다.