Esta guía es compatible con Health Connect versión 1.1.0-alpha12 y versiones posteriores.
Se realizaron cambios en los metadatos de Health Connect para los desarrolladores que se actualicen a la versión 1.1.0-alpha12 o una posterior.
Información de la biblioteca
El ID del artefacto del complemento de Android para Gradle de Google Maven identifica la biblioteca de Health Connect a la que te deberás actualizar.
Agrega esta dependencia del SDK de Health Connect a tu archivo build.gradle del módulo:
dependencies {
implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}
Cambios de metadatos
Se introdujeron dos cambios de metadatos en el SDK de Health Connect Jetpack a partir de la versión 1.1.0-alpha12 para ayudar a verificar que existan metadatos útiles adicionales en el ecosistema. Si metadata no está incluido en tu constructor Record, es posible que veas un error Constructor internal.
Cómo especificar el método de registro
Debes especificar los detalles de los metadatos cada vez que se cree una instancia de un objeto de tipo Record().
Cuando escribas datos en Health Connect, debes especificar uno de los cuatro métodos de registro
con uno de los métodos de fábrica
correspondientes para crear una instancia de Metadata:
| Método de registro | Descripción |
|---|---|
RECORDING_METHOD_UNKNOWN |
No se puede verificar el método de registro. |
RECORDING_METHOD_MANUAL_ENTRY |
El usuario ingresó los datos. |
RECORDING_METHOD_AUTOMATICALLY_RECORDED |
Un dispositivo o sensor registró los datos. |
RECORDING_METHOD_ACTIVELY_RECORDED |
El usuario inició o finalizó la sesión de registro en un dispositivo. |
Por ejemplo:
StepsRecord( startTime = Instant.ofEpochMilli(1234L), startZoneOffset = null, endTime = Instant.ofEpochMilli(1236L), endZoneOffset = null, metadata = Metadata(), count = 10 )
Tipo de dispositivo
Debes especificar un tipo de dispositivo para todos los datos registrados de forma automática y activa. Para obtener más detalles, consulta la
Device clase en la documentación de Jetpack. Los tipos de dispositivos actuales incluyen los siguientes:
| Tipo de dispositivo | Descripción |
|---|---|
TYPE_UNKNOWN |
Se desconoce el tipo de dispositivo. |
TYPE_WATCH |
El tipo de dispositivo es un reloj. |
TYPE_PHONE |
El tipo de dispositivo es un teléfono. |
TYPE_SCALE |
El tipo de dispositivo es una balanza. |
TYPE_RING |
El tipo de dispositivo es un anillo. |
TYPE_HEAD_MOUNTED |
El tipo de dispositivo es un dispositivo montado en la cabeza. |
TYPE_FITNESS_BAND |
El tipo de dispositivo es una correa de fitness. |
TYPE_CHEST_STRAP |
El tipo de dispositivo es una correa para el pecho. |
TYPE_SMART_DISPLAY |
El tipo de dispositivo es una pantalla inteligente. |
Algunos valores de Device.type solo están disponibles en versiones posteriores de Health Connect. Cuando la función de tipos de dispositivos extendidos no está disponible, estos tipos se tratan como Device.TYPE_UNKNOWN.
| Tipos de dispositivos extendidos | Descripción |
|---|---|
TYPE_CONSUMER_MEDICAL_DEVICE |
El tipo de dispositivo es un dispositivo médico. |
TYPE_GLASSES |
El tipo de dispositivo es un par de lentes inteligentes. |
TYPE_HEARABLE |
El tipo de dispositivo es un dispositivo auditivo. |
TYPE_FITNESS_MACHINE |
El tipo de dispositivo es una máquina estacionaria. |
TYPE_FITNESS_EQUIPMENT |
El tipo de dispositivo es equipo de fitness. |
TYPE_PORTABLE_COMPUTER |
El tipo de dispositivo es una computadora portátil. |
TYPE_METER |
El tipo de dispositivo es un medidor. |
FEATURE_EXTENDED_DEVICE_TYPES en el cliente:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_EXTENDED_DEVICE_TYPES
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Por ejemplo:
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 )
Fragmentos actualizados
Se actualizaron las guías de Health Connect en todos los casos en que se necesitaban fragmentos nuevos para cumplir con los nuevos requisitos de metadatos. Para ver algunos ejemplos, consulta la página sobre cómo escribir datos.
Nuevos métodos de metadatos
Ya no se pueden crear instancias de metadatos directamente, por lo que debes usar uno de los métodos de fábrica para obtener una instancia nueva de metadatos. Los métodos de fábrica verifican que se proporcione información del dispositivo cuando se usó un dispositivo o sensor para registrar los datos. En el caso de los datos ingresados de forma manual, proporcionar información del dispositivo sigue siendo opcional. Cada función tiene tres variantes de firma:
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
Para obtener más información, consulta el Proyecto de código abierto de Android.
Datos de prueba
Usa la biblioteca de pruebas y
MetadataTestHelper para simular valores de metadatos
esperados:
private val TEST_METADATA =
Metadata.unknownRecordingMethod(
clientRecordId = "clientId",
clientRecordVersion = 1L,
device = Device(type = Device.TYPE_UNKNOWN),
).populatedWithTestValues(id = "test")
Esto simula el comportamiento de la implementación de Health Connect, que propaga automáticamente estos valores durante la inserción de registros.
Para la biblioteca de pruebas, debes agregar esta dependencia del SDK de Health Connect a tu archivo build.gradle del módulo:
dependencies {
testImplementation "androidx.health.connect:connect-testing:1.0.0-alpha02"
}
Actualiza la biblioteca
Los pasos principales que debes realizar son los siguientes:
Actualiza tu biblioteca a la versión 1.1.0-alpha12.
Cuando compiles la biblioteca, se generarán errores de compilación cuando se necesiten metadatos nuevos. Para resolver estos errores y completar la migración, verifica que realices los siguientes cambios:
- Es obligatorio especificar un método de registro cuando se construye un
Record. Para ello, usa uno de los métodos de fábrica proporcionados enMetadata, comoMetadata.manualEntry()oMetadata.activelyRecorded(device = Device(...)). - En el caso de los datos registrados por un dispositivo, es obligatorio especificar un tipo de dispositivo, como
Device.TYPE_WATCHoDevice.TYPE_PHONE.
- Es obligatorio especificar un método de registro cuando se construye un
Si tu app escribe tipos de dispositivos extendidos, colócalos detrás de
FEATURE_EXTENTED_DEVICE_TYPESpara evitarTYPE_UNKNOWNinesperados en dispositivos en los que la función no está disponible.