本指南与健康数据共享 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 中引入了两项元数据变更,以帮助验证生态系统中是否存在其他有用的元数据。如果 Record 构造函数中未包含 metadata,您可能会看到构造函数内部 错误。
指定记录方法
每当实例化 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 值仅在 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
}
例如:
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 )
代码段已更新
如果需要新代码段来满足新的元数据要求,健康数据共享 指南已更新。如需查看一些示例,请参阅 写入数据页面。
新的元数据方法
元数据无法再直接实例化,因此请使用其中一个工厂方法来获取新的元数据实例。工厂方法会验证在使用设备或传感器记录数据时是否提供了设备信息。对于手动输入的数据,提供设备信息仍然是可选的。 每个函数都有三种签名变体:
activelyRecordedfun activelyRecorded(device: Device): Metadata.fun activelyRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadatafun activelyRecordedWithId(id: String, device: Device): Metadata
autoRecordedfun autoRecorded(device: Device): Metadatafun autoRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadatafun autoRecordedWithId(id: String, device: Device): Metadata
manualEntryfun manualEntry(device: Device? = null): Metadatafun manualEntry(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadatafun manualEntryWithId(id: String, device: Device? = null): Metadata
unknownRecordingMethodfun unknownRecordingMethod(device: Device? = null): Metadatafun unknownRecordingMethod(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadatafun 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.0-alpha12。
构建库时,如果需要新的元数据,系统会抛出编译错误。如需解决这些错误并完成迁移,请确认您进行了以下更改:
- 构造
Record时,必须指定记录方法。这可以通过使用Metadata中提供的其中一个工厂方法来完成,例如Metadata.manualEntry()或Metadata.activelyRecorded(device = Device(...))。 - 对于设备记录的数据,必须指定设备类型,例如
Device.TYPE_WATCH或Device.TYPE_PHONE。
- 构造
如果您的应用写入扩展设备类型,请将它们置于
FEATURE_EXTENTED_DEVICE_TYPES后面,以避免在功能不可用的设备上出现意外的TYPE_UNKNOWN。