Cómo leer datos sin procesar

En el siguiente ejemplo, se muestra cómo leer datos sin procesar como parte de un flujo de trabajo común.

Lectura simple

El tipo de datos de Pasos en Health Connect captura la cantidad de pasos que dio un usuario entre cada medición. El recuento de pasos representa una medición común en todas las plataformas de salud, actividad física y bienestar. Health Connect facilita la lectura y la escritura de los datos del recuento de pasos.

Para leer registros, crea un ReadRecordsRequest e infórmalo cuando llames a readRecords.

En el siguiente ejemplo, se muestra cómo leer los datos del recuento de pasos de un usuario en un tiempo determinado. Para ver un ejemplo extendido con SensorManager, consulta el recuento de pasos en la guía de datos de tu empresa.

suspend fun readStepsByTimeRange(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.readRecords(
            ReadRecordsRequest(
                StepsRecord::class,
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        for (stepRecord in response.records) {
            // Process each step record
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

Lectura de datos pasados

Si una app escribió registros en Health Connect anteriormente, es posible que la app vuelva a leerlos sin requerir un permiso de lectura para esos registros específicos. Esto se aplica a situaciones en las que la app necesita volver a sincronizarse con Health Connect cuando el usuario la reinstala.

Para leer los datos en esta situación, debes indicar el nombre del paquete como un objeto DataOrigin en el parámetro dataOriginFilter de tu ReadRecordsRequest.

En el siguiente ejemplo, se muestra cómo indicar un nombre de paquete cuando se leen los registros de Pasos:

try {
    val response =  healthConnectClient.readRecords(
        ReadRecordsRequest(
            recordType = StepsRecord::class,
            timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
            dataOriginFilter = setOf(DataOrigin("com.my.package.name"))
        )
    )
    for (record in response.records) {
        // Process each record
    }
} catch (e: Exception) {
    // Run error handling here
}

Restricción de lectura de 30 días

Health Connect puede leer datos hasta 30 días antes del otorgamiento de cualquier permiso.

Sin embargo, si un usuario borra tu app, se perderá el historial de permisos. Si el usuario vuelve a instalar tu app y le otorga permiso de nuevo, la app podrá leer datos de Health Connect hasta 30 días antes de esa fecha nueva.

Ejemplo

Si un usuario otorgó permiso de lectura a tu aplicación por primera vez el 30 de marzo de 2023, los datos más antiguos que podría leer tu app serán del 28 de febrero de 2023 en adelante.

Luego, el 10 de mayo de 2023, el usuario borra tu app. El usuario decide volver a instalarla el 15 de mayo de 2023 y otorgar permiso de lectura. Ahora, la fecha más antigua de la que puede leer datos es el 15 de abril de 2023.

Restricción en primer plano

La lectura de datos con Health Connect está restringida a las aplicaciones que se ejecutan en primer plano. Se implementó esta restricción para fortalecer aún más la privacidad del usuario. Esto garantiza a los usuarios que Health Connect no tiene acceso de lectura en segundo plano a sus datos, y que solo se puede leer y acceder a ellos en primer plano.

Para situaciones en las que se pueden tolerar interrupciones, como mostrar una lectura en tu aplicación, lee directamente desde Health Connect a tu aplicación cliente.

Para situaciones en las que prefieres no tener interrupciones, como leer un rango de datos de Health Connect y, luego, escribirlo y subirlo a otro lugar, usa un ForegroundService, en lugar de una Activity cuando se pueda descartar con rapidez.