Это руководство совместимо с Health Connect версии 1.1.0-alpha12 и более поздних версий.
В Health Connect внесены изменения в метаданные для разработчиков, которые перешли на версию 1.1.0-alpha12 или более позднюю.
Информация о библиотеке
Идентификатор артефакта плагина Google Maven для Android Gradle определяет библиотеку Health Connect, до которой необходимо выполнить обновление. Добавьте эту зависимость Health Connect SDK в файл build.gradle
на уровне модуля:
dependencies {
implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}
Изменения метаданных
Начиная с версии 1.1.0-alpha12 в Health Connect Jetpack SDK были внесены два изменения метаданных, которые помогут проверить наличие дополнительных полезных метаданных в экосистеме.
Укажите метод записи
При каждом создании экземпляра объекта типа 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,
)
Тип устройства
Для всех автоматически и активно записываемых данных необходимо указать тип устройства. manufacturer
и model
также могут быть указаны, но это необязательно. Подробнее см. в описании класса 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
}
По возможности укажите производителя и модель устройства, а также его тип. Например:
private val TEST_DEVICE = Device(
manufacturer = "Google",
model = "Pixel Watch",
type = Device.TYPE_WATCH
)
Фрагменты обновлены
Руководства 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 .
Тестовые данные
Используйте библиотеку тестирования и 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
на устройствах, где эта функция недоступна.