This guide is compatible with Health Connect version 1.1.0-alpha12.
There are changes to metadata in Health Connect for developers who choose to upgrade to release 1.1.0-alpha12.
Library information
The Google Maven Android gradle plugin artifact ID
identifies the Health Connect library to which you will need to upgrade.
Add this Health Connect SDK dependency to your module-level
build.gradle
file:
dependencies {
implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}
Metadata changes
Two metadata changes have been introduced to the Health Connect Jetpack SDK as of version 1.1.0-alpha12 to ensure that additional useful metadata exists in the ecosystem.
You are required to specify metadata details whenever
a Record()
type object is instantiated.
You must specify one of four recording methods when writing data to Health Connect:
Recording method | Description |
---|---|
RECORDING_METHOD_UNKNOWN |
The recording method cannot be verified. |
RECORDING_METHOD_MANUAL_ENTRY |
The user entered the data. |
RECORDING_METHOD_AUTOMATICALLY_RECORDED |
A device or sensor recorded the data. |
RECORDING_METHOD_ACTIVELY_RECORDED |
The user initiated the start or end of the recording session on a device. |
For example:
StepsRecord(
startTime \= Instant.ofEpochMilli(1234L),
startZoneOffset \= null,
endTime \= Instant.ofEpochMilli(1236L),
endZoneOffset \= null,
metadata \= Metadata.manualEntry(),
Count \= 10,
)
You are required to specify a device type for all automatically and actively recorded data. Current device types include:
Device type | Description |
---|---|
TYPE_UNKNOWN |
The device type is unknown. |
TYPE_WATCH |
The device type is a watch. |
TYPE_PHONE |
The device type is a phone. |
TYPE_SCALE |
The device type is a scale. |
TYPE_RING |
The device type is a ring. |
TYPE_HEAD_MOUNTED |
The device type is a head-mounted device. |
TYPE_FITNESS_BAND |
The device type is a fitness band. |
TYPE_CHEST_STRAP |
The device type is a chest strap. |
TYPE_SMART_DISPLAY |
The device type is a smart display. |
For example:
private val TEST_DEVICE = Device(type = Device.TYPE_PHONE)
Snippets updated
Health Connect guides have been updated wherever new snippets are needed to adhere to the new metadata requirements. For some examples, refer to the Write Data page.
New metadata methods
Metadata can no longer be directly instantiated, so use one of the factory methods to get a new instance of metadata. Each function has three signature variants:
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
For more information, see the Android Open Source Project.
Testing data
Use the Testing Library to mock expected metadata values:
private val TEST_METADATA =
Metadata.unknownRecordingMethod(
clientRecordId = "clientId",
clientRecordVersion = 1L,
device = Device(type = Device.TYPE_UNKNOWN),
).populatedWithTestValues(id = "test")
This simulates the behavior of the Health Connect implementation, which automatically populates these values during record insertion.
For the testing library, you need to add this Health Connect SDK dependency to
your module-level build.gradle
file:
dependencies {
testImplementation "androidx.health.connect:connect-testing:1.0.0-alpha02"
}
Upgrade the library
The main steps you need to perform are:
Upgrade your library to 1.1.0-alpha12.
When building the library, compilation errors will be thrown where new metadata is needed, so be sure to implement the necessary metadata changes whenever a
Record()
type object is instantiated. This should complete the migration.