Esta guía es compatible con la versión 1.1.0-rc01 de Health Connect.
Health Connect proporciona un tipo de datos de atención plena para medir varios aspectos de la salud mental, como el estrés y la ansiedad. La atención plena es un tipo de dato que forma parte del bienestar general en Health Connect.
Cómo verificar 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é preinstalada en todos los dispositivos o que esté inhabilitada.
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 devuelva 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 registros de sesiones de mindfulness en Health Connect, verifica la disponibilidad deFEATURE_MINDFULNESS_SESSION
en el cliente:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_MINDFULNESS_SESSION
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Permisos necesarios
El acceso a la función de mindfulness está protegido por los siguientes permisos:
android.permission.health.READ_MINDFULNESS
android.permission.health.WRITE_MINDFULNESS
Si deseas agregar la función de mindfulness a tu app, comienza por solicitar permisos de escritura para el tipo de datos MindfulnessSession
.
Este es el permiso que debes declarar para poder escribir datos de mindfulness:
<application>
<uses-permission
android:name="android.permission.health.WRITE_MINDFULNESS" />
...
</application>
Para leer la actividad de atención plena, debes solicitar los siguientes permisos:
<application>
<uses-permission
android:name="android.permission.health.READ_MINDFULNESS" />
...
</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(MindfulnessSessionRecord::class),
HealthPermission.getWritePermission(MindfulnessSessionRecord::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 el registro de una sesión de mindfulness
Cada registro de sesión de atención plena captura cualquier tipo de sesión de atención plena que realice un usuario, por ejemplo, meditación, respiración y movimiento. El registro también puede incluir notas adicionales sobre la sesión.
Agregaciones admitidas
Los siguientes valores agregados están disponibles para MindfulnessSessionRecord
:
Leer sesión de mindfulness
En el siguiente fragmento de código, se muestra cómo leer una sesión de atención plena:
if (healthConnectClient.features.getFeatureStatus(FEATURE_MINDFULNESS_SESSION) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
healthConnectClient.insertRecords(listOf(MindfulnessSessionRecord(
startTime = Instant.now().minus(Duration.ofHours(1)),
startZoneOffset = ZoneOffset.UTC,
endTime = Instant.now(),
endZoneOffset = ZoneOffset.UTC,
mindfulnessSessionType = MindfulnessSessionRecord.MINDFULNESS_SESSION_TYPE_MEDITATION,
title = "Lake meditation",
notes = "Meditation by the lake",
metadata = Metadata.activelyRecorded(
clientRecordId = "myid",
clientRecordVersion = 0.0,
device = Device(type = Device.TYPE_PHONE)
),
)))
}