Schlafeinheiten aufzeichnen

Diese Anleitung ist mit Health Connect-Version 1.1.0-alpha11 kompatibel.

Health Connect bietet den Datentyp Schlafeinheit, um Informationen zum Schlaf eines Nutzers zu speichern, z. B. eine nächtliche Schlafeinheit oder ein Nickerchen am Tag. Der Datentyp SleepSessionRecord wird verwendet, um diese Sitzungen darzustellen.

Mit Sitzungen können Nutzer die zeitbasierte Leistung über einen bestimmten Zeitraum hinweg messen, z. B. die kontinuierliche Herzfrequenz oder Standortdaten.

SleepSessionRecord-Sitzungen enthalten Daten zu Schlafphasen wie AWAKE, SLEEPING und DEEP.

Untertypdaten gehören zu einer Sitzung und sind nur sinnvoll, wenn sie mit einer übergeordneten Sitzung gelesen werden. Zum Beispiel die Schlafphase.

Verfügbarkeit der Funktion

Für diesen Datentyp ist kein Verfügbarkeitskennzeichen für Funktionen vorhanden.

Erforderliche Berechtigungen

Der Zugriff auf Schlafsitzungen ist durch die folgenden Berechtigungen geschützt:

  • android.permission.health.READ_SLEEP
  • android.permission.health.WRITE_SLEEP

Erklären Sie diese Berechtigungen in der Play Console für Ihre App sowie im Manifest Ihrer App:

<application>
  <uses-permission
android:name="android.permission.health.READ_SLEEP" />
  <uses-permission
android:name="android.permission.health.WRITE_SLEEP" />
...
</application>

Sie sind dafür verantwortlich, alle erforderlichen Berechtigungen anzugeben, die Sie auf Ihren Geräten und in Ihren Apps verwenden möchten. Sie sollten auch prüfen, ob jede Berechtigung vor der Verwendung vom Nutzer erteilt wurde.

Allgemeine Anleitung

Hier sind einige Best Practices für die Arbeit mit Schlafeinheiten in Health Connect.

  • Sitzungen sollten verwendet werden, um Daten aus einer bestimmten Schlafsitzung hinzuzufügen, für den Schlaf:
suspend fun writeSleepSession(healthConnectClient: HealthConnectClient) {
    healthConnectClient.insertRecords(
        listOf(
            SleepSessionRecord(
                startTime = Instant.parse("2022-05-10T23:00:00.000Z"),
                startZoneOffset = ZoneOffset.of("-08:00"),
                endTime = Instant.parse("2022-05-11T07:00:00.000Z"),
                endZoneOffset = ZoneOffset.of("-08:00"),
                title = "My Sleep"
            ),
        )
    )
}
  • Sitzungen sollten nicht für allgemeine Messungen wie die tägliche Schrittzahl verwendet werden.
  • Untertypdaten enthalten keine UID, aber zugeordnete Daten haben eindeutige UIDs.
  • Untertypdaten müssen in einer Sitzung mit sequenziellen Zeitstempeln ausgerichtet werden, die sich nicht überschneiden. Lücken sind jedoch zulässig.
  • Sitzungen sind nützlich, wenn Nutzer möchten, dass Daten einer Sitzung zugeordnet und als Teil einer Sitzung erfasst werden, anstatt kontinuierlich aufgezeichnet zu werden.

Schlafeinheiten

Du kannst Schlafdaten in Health Connect lesen oder schreiben. Schlafdaten werden als Sitzung angezeigt und können in acht verschiedene Schlafphasen unterteilt werden:

  • UNKNOWN: Nicht angegeben oder unbekannt, wenn der Nutzer schläft.
  • AWAKE: Der Nutzer ist innerhalb eines Schlafzyklus wach, nicht tagsüber.
  • SLEEPING: Allgemeine oder nicht detaillierte Beschreibung des Schlafs.
  • OUT_OF_BED: Der Nutzer steht mitten in einer Schlafsitzung auf.
  • AWAKE_IN_BED: Der Nutzer ist wach im Bett.
  • LIGHT: Der Nutzer befindet sich in einer Phase des leichten Schlafs.
  • DEEP: Der Nutzer befindet sich in einem Tiefschlafzyklus.
  • REM: Der Nutzer befindet sich in einem REM-Schlafzyklus.

Diese Werte geben den Schlaftyp an, den ein Nutzer in einem bestimmten Zeitraum hat. Das Schreiben von Schlafphasen ist optional, wird aber empfohlen, sofern verfügbar.

Schlafdauer schreiben

Der Datentyp SleepSessionRecord hat zwei Teile:

  1. Die gesamte Sitzung, die die gesamte Schlafdauer umfasst.
  2. Einzelne Phasen während des Schlafs, z. B. Leichtschlaf oder Tiefschlaf.

So fügst du eine Schlafperiode ohne Phasen ein:

SleepSessionRecord(
      title = "weekend sleep",
      startTime = startTime,
      endTime = endTime,
      startZoneOffset = ZoneOffset.UTC,
      endZoneOffset = ZoneOffset.UTC,
)

So fügst du Phasen hinzu, die den gesamten Zeitraum einer Schlafperiode abdecken:

val stages = listOf(
    SleepSessionRecord.Stage(
        startTime = START_TIME
        endTime = END_TIME,
        stage = SleepSessionRecord.STAGE_TYPE_SLEEPING,
    )
)

SleepSessionRecord(
        title = "weekend sleep",
        startTime = START_TIME,
        endTime = END_TIME,
        startZoneOffset = START_ZONE_OFFSET,
        endZoneOffset = END_ZONE_OFFSET,
        stages = stages,
)

Schlafdauer lesen

Prüfen Sie für jeden zurückgegebenen Schlafeintrag, ob auch Daten zu Schlafphasen vorhanden sind:

suspend fun readSleepSessions(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    val response =
        healthConnectClient.readRecords(
            ReadRecordsRequest(
                SleepSessionRecord::class,
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
    for (sleepRecord in response.records) {
        // Retrieve relevant sleep stages from each sleep record
        val sleepStages = sleepRecord.stages
    }
}

Schlafeintrag löschen

So löschen Sie eine Sitzung. In diesem Beispiel haben wir eine Schlafeinheit verwendet:

suspend fun deleteSleepSession(
    healthConnectClient: HealthConnectClient,
    sleepRecord: SleepSessionRecord,
) {
    val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
    healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
}