Mide la temperatura cutánea

Esta guía es compatible con la versión 1.1.0-alpha12 de Health Connect.

Health Connect proporciona un tipo de datos de temperatura cutánea para medir la temperatura corporal periférica. Esta medición es un indicador particularmente útil para detectar la calidad del sueño, la salud reproductiva y el posible inicio de una enfermedad.

Disponibilidad de funciones

Para determinar si el dispositivo de un usuario admite la temperatura cutánea en Health Connect, verifica la disponibilidad de FEATURE_SKIN_TEMPERATURE en el cliente:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}

Consulta Cómo verificar la disponibilidad de funciones para obtener más información.

Permisos necesarios

El acceso a la temperatura cutánea está protegido por los siguientes permisos:

  • android.permission.health.READ_SKIN_TEMPERATURE
  • android.permission.health.WRITE_SKIN_TEMPERATURE

Si deseas agregar la función de temperatura de la piel a tu app, comienza por solicitar permisos de escritura para el tipo de datos SkinTemperature.

Este es el permiso que debes declarar para poder escribir la temperatura de la piel:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_SKIN_TEMPERATURE" />
...
</application>

Para leer la temperatura cutánea, debes solicitar los siguientes permisos:

<application>
  <uses-permission
android:name="android.permission.health.READ_SKIN_TEMPERATURE" />
...
</application>

Solicita permisos al usuario

Después de crear una instancia de cliente, tu app debe solicitarle permisos al usuario. Los usuarios deben poder otorgar o rechazar permisos en cualquier momento.

Para hacerlo, crea un conjunto de permisos para los tipos de datos necesarios. Primero, asegúrate de que los permisos del conjunto se declaren en tu manifiesto de Android.

// Create a set of permissions for required data types
val PERMISSIONS =
    setOf(
  HealthPermission.getReadPermission(SkinTemperatureRecord::class),
  HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)

Usa getGrantedPermissions para ver si tu app ya tiene otorgados los permisos necesarios. De lo contrario, usa createRequestPermissionResultContract para solicitarlos. Se mostrará la pantalla de permisos de Health Connect.

// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()

val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions successfully granted
  } else {
    // Lack of required permissions
  }
}

suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
  val granted = healthConnectClient.permissionController.getGrantedPermissions()
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions already granted; proceed with inserting or reading data
  } else {
    requestPermissions.launch(PERMISSIONS)
  }
}

Como los usuarios pueden otorgar o revocar permisos en cualquier momento, tu app necesita verificar en forma periódica los permisos otorgados y controlar situaciones en las que el permiso se pierde.

Información incluida en un registro de temperatura cutánea

Las mediciones de la temperatura cutánea se organizan en registros. Cada registro consta de la siguiente información:

  • Temperatura de referencia, en grados Celsius o Fahrenheit. Este es un valor opcional que resulta más útil para la visualización en la IU de tu app.
  • Una lista de deltas en la temperatura cutánea, en la que se muestra el cambio en la temperatura cutánea desde la última medición. Si se proporciona la temperatura de referencia, estos deltas deben usar las mismas unidades de temperatura.
  • Ubicación en el cuerpo del usuario donde se tomó la medición: dedo, dedo del pie o muñeca.

Agregaciones admitidas

No hay agregaciones admitidas para este tipo de datos.

Ejemplo de uso

Leer o escribir mediciones de temperatura cutánea con la biblioteca de Jetpack

Lee la temperatura cutánea

En el siguiente fragmento de código, se muestra cómo leer las mediciones de temperatura de la piel con la biblioteca de Jetpack:

suspend fun readSkinTemperatures() {
    // Error handling, permission check, and feature availability check
    // aren't included.

    // Record includes measurements during the past hour.
    val recordEndTime = Instant.now()
    val recordStartTime = recordEndTime.minusSeconds(60 * 60)

    val response = healthConnectClient.readRecords(
        ReadRecordsRequest<SkinTemperatureRecord>(
            timeRangeFilter = TimeRangeFilter.between(
                recordStartTime, recordEndTime
            )
        )
    )

    for (skinTemperatureRecord in response.records) {
        // Process each skin temperature record here.
    }
}

Escribe la temperatura cutánea

En el siguiente fragmento de código, se muestra cómo escribir mediciones de temperatura de la piel con la biblioteca de Jetpack:


suspend fun writeSkinTemperatures(): InsertRecordsResponse {
    // Error handling, permission check, and feature availability check
    // aren't included.

    // Record includes measurements during the past hour.
    val recordEndTime: ZonedDateTime = now()
    val recordStartTime: ZonedDateTime = recordEndTime.minusHours(1)

    healthConnectClient.insertRecords(
        // For this example, there's only one skin temperature record.
        listOf(
            SkinTemperatureRecord(
                baseline = Temperature.celsius(37.0),
                startTime = recordStartTime.toInstant(),
                startZoneOffset = recordStartTime.offset,
                endTime = recordEndTime.toInstant(),
                endZoneOffset = recordEndTime.offset,
                deltas = listOf(
                    SkinTemperatureRecord.Delta(
                        recordEndTime.minusMinutes(50).toInstant(), celsius(0.5)
                    ), SkinTemperatureRecord.Delta(
                        recordEndTime.minusMinutes(30).toInstant(), celsius(-0.7)
                    )
                ),
                measurementLocation = SkinTemperatureRecord.MEASUREMENT_LOCATION_FINGER,
                metadata = Metadata.autoRecorded(
                    device = Device(type = Device.TYPE_RING)
                ),
            )
        )
    )
}