Śledzenie sesji snu

Ten przewodnik jest zgodny z wersją Health Connect 1.1.0-alpha11.

Health Connect udostępnia typ danych sesja snu, który służy do przechowywania informacji o śnie użytkownika, np. o sesji nocnej lub drzemce w ciągu dnia. Do reprezentowania tych sesji używany jest SleepSessionRecord typ danych.

Sesje umożliwiają użytkownikom pomiar wydajności w określonym czasie, np. ciągłego tętna lub danych o lokalizacji.

Sesje SleepSessionRecord zawierają dane rejestrujące fazy snu, takie jak AWAKE, SLEEPINGDEEP.

Dane podtypu to dane, które „należą” do sesji i mają znaczenie tylko wtedy, gdy są odczytywane z sesją nadrzędną. Na przykład faza snu.

Dostępność funkcji

Dla tego typu danych nie ma flagi dostępności funkcji.

Wymagane uprawnienia

Dostęp do sesji snu jest chroniony przez te uprawnienia:

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

Zadeklaruj te uprawnienia w Konsoli Play w przypadku swojej aplikacji, a także w pliku manifestu aplikacji:

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

Odpowiadasz za zadeklarowanie wszystkich odpowiednich uprawnień, których zamierzasz używać na urządzeniach i w aplikacjach. Przed użyciem sprawdź też, czy użytkownik przyznał każde uprawnienie.

Ogólne wskazówki

Oto kilka sprawdzonych metod pracy z sesjami snu w Health Connect.

  • Sesje należy wykorzystywać do dodawania danych z konkretnej sesji snu: w przypadku snu:
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"
            ),
        )
    )
}
  • Sesji nie należy używać do ogólnych pomiarów, takich jak dzienna liczba kroków.
  • Dane podtypu nie zawierają identyfikatora UID, ale powiązane dane mają odrębne identyfikatory UID.
  • Dane podtypu muszą być dopasowane w sesji z kolejnymi sygnaturami czasowymi, które się nie pokrywają. Dozwolone są jednak przerwy.
  • Sesje są przydatne, jeśli użytkownik chce, aby dane były powiązane z sesją (i śledzone w jej ramach), a nie rejestrowane w sposób ciągły.

Sesje snu

Możesz odczytywać i zapisywać dane dotyczące snu w Health Connect. Dane dotyczące snu są wyświetlane jako sesja i można je podzielić na 8 różnych faz snu:

  • UNKNOWN: nieokreślony lub nieznany, jeśli użytkownik śpi.
  • AWAKE: użytkownik nie śpi w ciągu cyklu snu, a nie w ciągu dnia.
  • SLEEPING: ogólny lub mało szczegółowy opis snu.
  • OUT_OF_BED: użytkownik wstaje z łóżka w trakcie sesji snu.
  • AWAKE_IN_BED: użytkownik nie śpi i jest w łóżku.
  • LIGHT: użytkownik jest w fazie snu płytkiego.
  • DEEP: użytkownik jest w fazie snu głębokiego.
  • REM: użytkownik jest w fazie snu REM.

Wartości te reprezentują rodzaj snu użytkownika w określonym przedziale czasu. Zapisywanie faz snu jest opcjonalne, ale zalecane, jeśli jest dostępne.

Zapisywanie sesji snu

Typ danych SleepSessionRecord składa się z 2 części:

  1. Cała sesja obejmująca cały czas trwania snu.
  2. Poszczególne fazy snu, takie jak sen płytki lub głęboki.

Aby wstawić sesję snu bez faz:

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

Oto jak dodać fazy obejmujące cały okres sesji snu:

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

Odczytywanie sesji snu

W przypadku każdej zwróconej sesji snu sprawdź, czy są też dostępne dane o fazach snu:

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

Usuwanie sesji snu

Oto jak usunąć sesję. W tym przykładzie użyliśmy sesji snu:

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