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
, SLEEPING
i DEEP
.
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:
- Cała sesja obejmująca cały czas trwania snu.
- 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)
}