Требования к метаданным

Данное руководство совместимо с версией Health Connect 1.1.0-alpha12 и более поздними версиями.

В Health Connect произошли изменения в метаданных для разработчиков, обновивших свою систему до версии 1.1.0-alpha12 или более поздней.

Информация о библиотеке

Идентификатор артефакта плагина Google Maven Android Gradle определяет библиотеку Health Connect, на которую вам потребуется обновиться. Добавьте эту зависимость SDK Health Connect в файл build.gradle на уровне модуля:

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

Изменения метаданных

В версии 1.1.0-alpha12 в SDK Health Connect Jetpack были внесены два изменения в метаданные, чтобы проверить наличие дополнительных полезных метаданных в экосистеме. Если metadata не включены в конструктор Record , вы можете увидеть внутреннюю ошибку конструктора .

Укажите способ записи

При создании экземпляра объекта типа Record() необходимо указывать подробные метаданные.

При записи данных в Health Connect необходимо указать один из четырех методов записи, используя один из соответствующих фабричных методов для создания экземпляра 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.manualEntry(),
    Count = 10,
)

Тип устройства

Для всех автоматически и активно записываемых данных необходимо указать тип устройства. Более подробную информацию см. в описании класса Device в документации Jetpack . В настоящее время доступны следующие типы устройств:

Тип устройства Описание
TYPE_UNKNOWN Тип устройства неизвестен.
TYPE_WATCH Тип устройства — часы.
TYPE_PHONE Тип устройства — телефон.
TYPE_SCALE Тип устройства — весы.
TYPE_RING Тип устройства — кольцо.
TYPE_HEAD_MOUNTED Тип устройства — наголовное.
TYPE_FITNESS_BAND Тип устройства — фитнес-браслет.
TYPE_CHEST_STRAP Данный тип устройства — нагрудный ремень.
TYPE_SMART_DISPLAY Тип устройства — смарт-дисплей.

Некоторые значения Device.type доступны только в более поздних версиях Health Connect. Если функция расширенных типов устройств недоступна, эти типы обрабатываются как Device.TYPE_UNKNOWN .

Расширенные типы устройств Описание
TYPE_CONSUMER_MEDICAL_DEVICE Тип устройства — медицинское устройство.
TYPE_GLASSES Тип устройства — это умные очки или очки для зрения.
TYPE_HEARABLE Тип устройства — слуховое устройство.
TYPE_FITNESS_MACHINE Тип устройства — стационарный станок.
TYPE_FITNESS_EQUIPMENT Тип устройства — фитнес-оборудование.
TYPE_PORTABLE_COMPUTER Тип устройства — портативный компьютер.
TYPE_METER Тип устройства — измерительный прибор.
Чтобы определить, поддерживает ли устройство пользователя расширенные типы устройств в Health Connect, проверьте наличие параметра 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
}
Для получения более подробной информации см. раздел «Проверка доступности функции» .

Например:

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

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

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

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

Фрагменты обновлены

В руководствах Health Connect были обновлены все необходимые фрагменты текста в соответствии с новыми требованиями к метаданным. Примеры можно найти на странице «Запись данных» .

Новые методы работы с метаданными

Метаданные больше нельзя создавать напрямую, поэтому для получения нового экземпляра метаданных используйте один из фабричных методов. Фабричные методы проверяют, что информация об устройстве предоставлена, когда устройство или датчик использовались для записи данных. Для данных, вводимых вручную, предоставление информации об устройстве остается необязательным. Каждая функция имеет три варианта сигнатуры:

  • 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 Open Source Project .

Тестовые данные

Используйте библиотеку Testing Library и MetadataTestHelper для имитации ожидаемых значений метаданных:

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

Это имитирует поведение реализации Health Connect, которая автоматически заполняет эти значения во время вставки записей.

Для библиотеки тестирования необходимо добавить зависимость Health Connect 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. Если ваше приложение записывает расширенные типы устройств, ограничьте их доступом через FEATURE_EXTENTED_DEVICE_TYPES чтобы избежать неожиданного TYPE_UNKNOWN на устройствах, где эта функция недоступна.