메타데이터 요구사항

이 가이드는 헬스 커넥트 버전 1.1.0-alpha12 이상과 호환됩니다.

1.1.0-alpha12 이상으로 업그레이드하는 개발자를 위한 헬스 커넥트의 메타데이터가 변경되었습니다.

라이브러리 정보

Google Maven Android Gradle 플러그인 아티팩트 ID 는 업그레이드해야 하는 헬스 커넥트 라이브러리를 식별합니다. 이 헬스 커넥트 SDK 종속 항목을 모듈 수준 build.gradle 파일에 추가합니다.

dependencies {
  implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}

메타데이터 변경

버전 1.1.0-alpha12부터 유용한 추가 메타데이터가 생태계에 있는지 확인하는 데 도움이 되도록 헬스 커넥트 Jetpack SDK 에 두 가지 메타데이터 변경사항이 도입되었습니다. metadataRecord 생성자에 포함되지 않은 경우 생성자 내부 오류가 표시될 수 있습니다.

녹화 방법 지정

Record() 유형 객체가 인스턴스화될 때마다 메타데이터 세부정보를 지정해야 합니다.

데이터를 헬스 커넥트에 쓸 때는 상응하는 팩터리 메서드 중 하나를 사용하여 네 가지 녹화 방법 중 하나를 지정해야 합니다.Metadata

녹화 방법 설명
RECORDING_METHOD_UNKNOWN 녹화 방법을 확인할 수 없습니다.
RECORDING_METHOD_MANUAL_ENTRY 사용자가 데이터를 입력했습니다.
RECORDING_METHOD_AUTOMATICALLY_RECORDED 기기 또는 센서가 데이터를 녹화했습니다.
RECORDING_METHOD_ACTIVELY_RECORDED 사용자가 기기에서 녹화 세션의 시작 또는 종료를 시작했습니다.

예를 들면 다음과 같습니다.

 StepsRecord(
    startTime = Instant.ofEpochMilli(1234L),
    startZoneOffset = null,
    endTime = Instant.ofEpochMilli(1236L),
    endZoneOffset = null,
    metadata = Metadata(),
    count = 10
)

기기 유형

자동으로 녹화된 모든 데이터와 활발하게 녹화된 데이터의 기기 유형을 지정해야 합니다. 자세한 내용은 Jetpack 문서의 Device 클래스를 참고하세요. 현재 기기 유형은 다음과 같습니다.

기기 유형 설명
TYPE_UNKNOWN 기기 유형을 알 수 없습니다.
TYPE_WATCH 기기 유형은 시계입니다.
TYPE_PHONE 기기 유형은 휴대전화입니다.
TYPE_SCALE 기기 유형은 체중계입니다.
TYPE_RING 기기 유형은 반지입니다.
TYPE_HEAD_MOUNTED 기기 유형은 헤드 마운트 기기입니다.
TYPE_FITNESS_BAND 기기 유형은 피트니스 밴드입니다.
TYPE_CHEST_STRAP 기기 유형은 가슴 스트랩입니다.
TYPE_SMART_DISPLAY 기기 유형은 스마트 디스플레이입니다.

일부 Device.type 값은 최신 버전의 헬스 커넥트에서만 사용할 수 있습니다. 확장된 기기 유형 기능을 사용할 수 없는 경우 이러한 유형은 Device.TYPE_UNKNOWN으로 처리됩니다.

확장된 기기 유형 설명
TYPE_CONSUMER_MEDICAL_DEVICE 기기 유형은 의료 기기입니다.
TYPE_GLASSES 기기 유형은 스마트 글라스 또는 안경입니다.
TYPE_HEARABLE 기기 유형은 히어러블 기기입니다.
TYPE_FITNESS_MACHINE 기기 유형은 고정식 기기입니다.
TYPE_FITNESS_EQUIPMENT 기기 유형은 피트니스 장비입니다.
TYPE_PORTABLE_COMPUTER 기기 유형은 휴대용 컴퓨터입니다.
TYPE_METER 기기 유형은 측정기입니다.
사용자 기기가 헬스 커넥트에서 확장된 기기 유형을 지원하는지 확인하려면 클라이언트에서 FEATURE_EXTENDED_DEVICE_TYPES의 사용 가능 여부를 확인하세요.

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_EXTENDED_DEVICE_TYPES
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}
자세한 내용은 기능 사용 가능 여부 확인을 참고하세요.

예를 들면 다음과 같습니다.

 val WATCH_DEVICE = Device(
    manufacturer = "Google",
    model = "Pixel Watch",
    type = Device.TYPE_WATCH
)

// Phone
 val PHONE_DEVICE = Device(
    manufacturer = "Google",
    model = "Pixel 8",
    type = Device.TYPE_PHONE
)

// Ring
 val RING_DEVICE = Device(
    manufacturer = "Oura",
    model = "Ring Gen3",
    type = Device.TYPE_RING
)

// Scale
 val SCALE_DEVICE = Device(
    manufacturer = "Withings",
    model = "Body Comp",
    type = Device.TYPE_SCALE
)

스니펫 업데이트됨

새 메타데이터 요구사항을 준수하기 위해 새 스니펫이 필요한 모든 곳에서 헬스 커넥트 가이드가 업데이트되었습니다. 일부 예는 데이터 쓰기 페이지를 참고하세요.

새 메타데이터 메서드

더 이상 메타데이터를 직접 인스턴스화할 수 없으므로 팩터리 메서드 중 하나를 사용하여 새 메타데이터 인스턴스를 가져옵니다. 팩터리 메서드는 기기 또는 센서가 데이터를 녹화하는 데 사용된 경우 기기 정보가 제공되는지 확인합니다. 수동으로 입력한 데이터의 경우 기기 정보를 제공하는 것은 선택사항입니다. 각 함수에는 세 가지 서명 변형이 있습니다.

  • activelyRecorded

    • fun activelyRecorded(device: Device): Metadata.
    • fun activelyRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun activelyRecordedWithId(id: String, device: Device): Metadata
  • autoRecorded

    • fun autoRecorded(device: Device): Metadata
    • fun autoRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun autoRecordedWithId(id: String, device: Device): Metadata
  • manualEntry

    • fun manualEntry(device: Device? = null): Metadata
    • fun manualEntry(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun manualEntryWithId(id: String, device: Device? = null): Metadata
  • unknownRecordingMethod

    • fun unknownRecordingMethod(device: Device? = null): Metadata
    • fun unknownRecordingMethod(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun unknownRecordingMethodWithId(id: String, device: Device? = null): Metadata

자세한 내용은 Android 오픈소스 프로젝트를 참고하세요.

테스트 데이터

테스트 라이브러리MetadataTestHelper를 사용하여 예상 메타데이터 값을 모의실험합니다.

private val TEST_METADATA =
    Metadata.unknownRecordingMethod(
        clientRecordId = "clientId",
        clientRecordVersion = 1L,
        device = Device(type = Device.TYPE_UNKNOWN),
    ).populatedWithTestValues(id = "test")

이렇게 하면 레코드 삽입 중에 이러한 값을 자동으로 채우는 헬스 커넥트 구현의 동작이 시뮬레이션됩니다.

테스트 라이브러리의 경우 이 헬스 커넥트 SDK 종속 항목을 모듈 수준 build.gradle 파일에 추가해야 합니다.

dependencies {
  testImplementation "androidx.health.connect:connect-testing:1.0.0-alpha02"
}

라이브러리 업그레이드

실행해야 하는 주요 단계는 다음과 같습니다.

  1. 라이브러리를 1.1.0-alpha12로 업그레이드합니다.

  2. 라이브러리를 빌드할 때 새 메타데이터가 필요한 컴파일 오류가 발생합니다. 이러한 오류를 해결하고 이전을 완료하려면 다음 변경사항을 적용했는지 확인하세요.

    • Record를 생성할 때 녹화 방법을 지정해야 합니다. 이렇게 하려면 Metadata에 제공된 팩터리 메서드 중 하나를 사용합니다. 예를 들면 Metadata.manualEntry() 또는 Metadata.activelyRecorded(device = Device(...))입니다.
    • 기기에서 녹화한 데이터의 경우 Device.TYPE_WATCH 또는 Device.TYPE_PHONE과 같은 기기 유형을 지정해야 합니다.
  3. 앱이 확장된 기기 유형을 쓰는 경우 기능이 제공되지 않는 기기에서 예기치 않은 TYPE_UNKNOWN을 방지하기 위해 FEATURE_EXTENTED_DEVICE_TYPES 뒤에 게이트합니다.