Данное руководство совместимо с версией 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 | Тип устройства — измерительный прибор. |
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.0-alpha12.
При сборке библиотеки будут возникать ошибки компиляции в местах, где требуются новые метаданные. Для устранения этих ошибок и завершения миграции убедитесь, что вы внесли следующие изменения:
- При создании объекта
Recordобязательно необходимо указать метод записи. Это делается с помощью одного из фабричных методов, предоставляемых вMetadata, например,Metadata.manualEntry()илиMetadata.activelyRecorded(device = Device(...)). - Для данных, записываемых устройством, обязательно необходимо указать тип устройства, например,
Device.TYPE_WATCHилиDevice.TYPE_PHONE.
- При создании объекта
Если ваше приложение записывает расширенные типы устройств, ограничьте их доступом через
FEATURE_EXTENTED_DEVICE_TYPESчтобы избежать неожиданногоTYPE_UNKNOWNна устройствах, где эта функция недоступна.