Cómo realizar mediciones del estado de salud en tiempo real con MeasureClient

Con la API de MeasureClient, tu app registra devoluciones de llamada para recibir datos durante un período breve. Este objeto se diseñó para situaciones en las que tu app está en uso y requiere actualizaciones rápidas de datos. Si es posible, crea esto con una IU en primer plano para que el usuario esté al tanto.

Cómo agregar dependencias

Para agregar una dependencia en los Servicios de salud, debes agregar el repositorio de Maven de Google a tu proyecto. Para obtener información relacionada, consulta el repositorio de Maven de Google.

Luego, en el archivo build.gradle a nivel del módulo, agrega la siguiente dependencia:

Groovy

dependencies {
    implementation "androidx.health:health-services-client:1.1.0-alpha02"
}

Kotlin

dependencies {
    implementation("androidx.health:health-services-client:1.1.0-alpha02")
}

Cómo verificar las funciones

Antes de registrarte para recibir actualizaciones de datos, verifica que el dispositivo pueda proporcionar el tipo de datos que necesita tu app. Si verificas primero las capacidades, podrás habilitar o inhabilitar ciertas funciones o modificar la IU de tu app para compensar las funciones que no están disponibles.

En el siguiente ejemplo, se muestra cómo comprobar si un dispositivo puede proporcionar el tipo de datos HEART_RATE_BPM:

val healthClient = HealthServices.getClient(this /*context*/)
val measureClient = healthClient.measureClient
lifecycleScope.launch {
    val capabilities = measureClient.getCapabilitiesAsync().await()
    supportsHeartRate = DataType.HEART_RATE_BPM in capabilities.supportedDataTypesMeasure
}

Regístrate para recibir datos

Cada devolución de llamada que registras corresponde a un solo tipo de datos. Ten en cuenta que algunos tipos de datos pueden tener estados de disponibilidad variables. Por ejemplo, es posible que los datos de la frecuencia cardíaca no estén disponibles si el dispositivo no está apoyado correctamente sobre la muñeca.

Es importante minimizar la cantidad de tiempo que registra la devolución de llamada, ya que estas generan un aumento en las tasas de muestreo del sensor, lo que, a su vez, aumenta el consumo de batería.

En el siguiente ejemplo, se muestra cómo registrar y cancelar el registro de una devolución de llamada para recibir datos de HEART_RATE_BPM:

val heartRateCallback = object : MeasureCallback {
    override fun onAvailabilityChanged(dataType: DeltaDataType<*, *>, availability: Availability) {
        if (availability is DataTypeAvailability) {
            // Handle availability change.
        }
    }

    override fun onDataReceived(data: DataPointContainer) {
        // Inspect data points.
    }
}
val healthClient = HealthServices.getClient(this /*context*/)
val measureClient = healthClient.measureClient

// Register the callback.
measureClient.registerMeasureCallback(DataType.Companion.HEART_RATE_BPM, heartRateCallback)

// Unregister the callback.
awaitClose {
    runBlocking {
        measureClient.unregisterMeasureCallbackAsync(DataType.Companion.HEART_RATE_BPM, heartRateCallback)
    }
}