마음챙김 추적

이 가이드는 Health Connect 버전 1.1.0-alpha11과 호환됩니다.

헬스 커넥트는 스트레스, 불안과 같은 정신 건강의 다양한 측면을 측정하는 마음챙김 데이터 유형을 제공합니다. 마음챙김은 헬스 커넥트의 전반적인 웰니스의 일부인 데이터 유형입니다.

필수 권한

헬스 커넥트의 다른 데이터 유형과 마찬가지로 마음챙김 세션에 대한 액세스는 READ_MINDFULNESS_SESSIONWRITE_MINDFULNESS_SESSION이라는 권한 쌍으로 보호됩니다.

사용자에게 권한 요청

클라이언트 인스턴스를 만든 후 앱은 사용자에게 권한을 요청해야 합니다. 사용자는 언제든지 권한을 부여하거나 거부할 수 있어야 합니다.

이렇게 하려면 필요한 데이터 유형의 권한 집합을 만듭니다. 먼저 집합의 권한이 Android 매니페스트에 선언되어 있는지 확인합니다.

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

getGrantedPermissions를 사용하여 앱에 필요한 권한이 이미 부여되었는지 확인합니다. 그렇지 않은 경우 createRequestPermissionResultContract를 사용하여 이러한 권한을 요청합니다. 헬스 커넥트 권한 화면이 표시됩니다.

// 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)
  }
}

사용자는 언제든지 권한을 부여하거나 취소할 수 있으므로 앱은 부여된 권한을 주기적으로 확인하고 권한이 상실되는 시나리오를 처리해야 합니다.

명상 세션 레코드에 포함된 정보

각 마음챙김 세션 레코드는 사용자가 수행하는 모든 유형의 마음챙김 세션(예: 명상, 호흡, 운동)을 캡처합니다. 기록에는 세션에 관한 추가 메모도 포함될 수 있습니다.

지원되는 집계

헬스 커넥트를 사용하면 특정 대수 차이 목록에 대해 다음과 같은 집계 값을 가져올 수 있습니다.

사용 예

다음 코드 스니펫은 Jetpack 라이브러리를 사용하여 명상 마음챙김 세션을 작성하는 방법을 보여줍니다.

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)
            ),
        )))
    }