Achtsamkeitsübungen aufzeichnen

Dieser Leitfaden ist mit der Health Connect-Version 1.1.0-rc01 kompatibel.

Health Connect bietet den Datentyp Achtsamkeit, mit dem verschiedene Aspekte der psychischen Gesundheit gemessen werden können, z. B. Stress und Angst. Achtsamkeit ist ein Datentyp, der in Health Connect zum allgemeinen Wohlbefinden gehört.

Verfügbarkeit der Funktion

Wenn du wissen möchtest, ob das Gerät eines Nutzers Daten zu Achtsamkeitssitzungen in Health Connect unterstützt, prüfe, ob FEATURE_MINDFULNESS_SESSION auf dem Client verfügbar ist:

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

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

Weitere Informationen finden Sie unter Verfügbarkeit von Funktionen prüfen.

Erforderliche Berechtigungen

Wie bei allen Datentypen in Health Connect ist der Zugriff auf eine Achtsamkeitssitzung durch zwei Berechtigungen geschützt: READ_MINDFULNESS und WRITE_MINDFULNESS.

Berechtigungen vom Nutzer anfordern

Nachdem Sie eine Clientinstanz erstellt haben, muss Ihre App vom Nutzer Berechtigungen anfordern. Nutzer müssen jederzeit Berechtigungen erteilen oder verweigern können.

Erstellen Sie dazu eine Reihe von Berechtigungen für die erforderlichen Datentypen. Achten Sie darauf, dass die Berechtigungen in der Gruppe zuerst in Ihrem Android-Manifest deklariert werden.

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

Mit getGrantedPermissions können Sie prüfen, ob Ihrer App bereits die erforderlichen Berechtigungen erteilt wurden. Andernfalls kannst du sie mit createRequestPermissionResultContract anfordern. Daraufhin wird der Bildschirm mit den Health Connect-Berechtigungen angezeigt.

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

Da Nutzer Berechtigungen jederzeit gewähren oder widerrufen können, muss Ihre App regelmäßig nach erteilten Berechtigungen suchen und mit Szenarien umgehen, in denen die Berechtigung verloren geht.

In einem Eintrag für eine Achtsamkeitsübung enthaltene Informationen

In jedem Datensatz zu einer Achtsamkeitsübung wird jede Art von Achtsamkeitsübung erfasst, die ein Nutzer ausführt, z. B. Meditation, Atmung und Bewegung. Der Eintrag kann auch zusätzliche Notizen zur Sitzung enthalten.

Unterstützte Aggregationen

Für diesen Datentyp werden keine Aggregationen unterstützt.

Anwendungsbeispiel

Im folgenden Code-Snippet wird gezeigt, wie eine Meditationseinheit mit der Jetpack-Bibliothek erstellt wird:

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