Esta guía es compatible con Health Connect versión 1.1.0-alpha12.
Health Connect proporciona un tipo de datos de temperatura cutánea para medir la temperatura corporal periférica. Esta medición es una señal particularmente útil para detectar la calidad del sueño, la salud reproductiva y el posible inicio de una enfermedad.
Verifica la disponibilidad de Health Connect
Antes de intentar usar Health Connect, tu app debe verificar que esté disponible en el dispositivo del usuario. Es posible que Health Connect no esté preinstalado en todos los dispositivos o que esté inhabilitado.
Puedes verificar la disponibilidad con el método HealthConnectClient.getSdkStatus().
Cómo verificar la disponibilidad de Health Connect
fun checkHealthConnectAvailability(context: Context) { val providerPackageName = "com.google.android.apps.healthdata" // Or get from HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName) if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) { // Health Connect is not available. Guide the user to install/enable it. // For example, show a dialog. return // early return as there is no viable integration } if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) { // Health Connect is available but requires an update. // Optionally redirect to package installer to find a provider, for example: val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding" context.startActivity( Intent(Intent.ACTION_VIEW).apply { setPackage("com.android.vending") data = Uri.parse(uriString) putExtra("overlay", true) putExtra("callerId", context.packageName) } ) return } // Health Connect is available, obtain a HealthConnectClient instance val healthConnectClient = HealthConnectClient.getOrCreate(context) // Issue operations with healthConnectClient }
Según el estado que muestra getSdkStatus(), puedes guiar al usuario para que instale o actualice Health Connect desde Google Play Store si es necesario.
Disponibilidad de funciones
Para determinar si el dispositivo de un usuario admite la temperatura cutánea en Health Connect, verifica la disponibilidad deFEATURE_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
}
Permisos necesarios
El acceso a la temperatura cutánea está protegido por los siguientes permisos:
android.permission.health.READ_SKIN_TEMPERATUREandroid.permission.health.WRITE_SKIN_TEMPERATURE
Si deseas agregar la función de temperatura cutánea a tu app, comienza por solicitar permisos para el tipo de datos SkinTemperature.
Este es el permiso que debes declarar para poder escribir la temperatura cutánea:
<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.
val permissions = setOf( HealthPermission.getReadPermission(SkinTemperatureRecord::class), HealthPermission.getWritePermission(SkinTemperatureRecord::class) )
getGrantedPermissions
para ver si tu app ya tiene otorgados los permisos necesarios. De lo contrario, usa
createRequestPermissionResultContract
para solicitar esos permisos. Se mostrará la pantalla de permisos de Health Connect.
val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getWritePermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class) ) val requestPermissionsLauncher = rememberLauncherForActivityResult( contract = PermissionController.createRequestPermissionResultContract() ) { grantedPermissions -> if (grantedPermissions.containsAll(permissions)) { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions granted!") } } else { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions denied.") } } }
Información que se incluye en un registro de temperatura cutánea
Las mediciones de 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 es más útil para la visualización en la IU de tu app.
- Una lista de deltas en la temperatura cutánea, cada una 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.
- La ubicación en el cuerpo del usuario donde se tomó la medición: dedo de la mano, dedo del pie o muñeca.
Agregaciones admitidas
Los siguientes valores agregados están disponibles para
SkinTemperatureRecord:
Ejemplo de uso
En los siguientes fragmentos de código, se muestra cómo leer y escribir mediciones de temperatura cutánea.
Leer registro de temperatura cutánea
En el siguiente fragmento de código, se muestra cómo leer una medición de temperatura cutánea 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.
}
}
Escribir un registro de temperatura cutánea
En el siguiente fragmento de código, se muestra cómo escribir mediciones de temperatura cutánea 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)
),
)
)
)
}