Это руководство совместимо с Health Connect версии 1.1.0-alpha11 .
Health Connect предоставляет тип данных «Сессия сна» для хранения информации о сне пользователя, например, о ночном или дневном сне. Для представления этих сеансов используется тип данных SleepSessionRecord
.
Сеансы позволяют пользователям измерять производительность за определенный период времени, например, непрерывный пульс или данные о местоположении.
Сеансы SleepSessionRecord
содержат данные, которые регистрируют фазы сна, такие как AWAKE
, SLEEPING
и DEEP
.
Подтип данных — это данные, которые «принадлежат» сеансу и имеют смысл только при чтении в родительском сеансе. Например, стадия сна.
Доступность функций
Для этого типа данных нет флага доступности функций.
Требуемые разрешения
Доступ к сеансам сна защищен следующими разрешениями:
-
android.permission.health.READ_SLEEP
-
android.permission.health.WRITE_SLEEP
Объявите эти разрешения в Play Console для вашего приложения, а также в манифесте вашего приложения:
<application>
<uses-permission
android:name="android.permission.health.READ_SLEEP" />
<uses-permission
android:name="android.permission.health.WRITE_SLEEP" />
...
</application>
Вы несёте ответственность за предоставление всех необходимых разрешений, которые вы планируете использовать на своих устройствах и в приложениях. Перед использованием убедитесь, что каждое разрешение предоставлено пользователем.
Общие рекомендации
Ниже приведены некоторые рекомендации по работе с сеансами сна в Health Connect.
- Сеансы следует использовать для добавления данных из определенного сеанса сна, например:
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"
),
)
)
}
- Сеансы не следует использовать для общих измерений, таких как подсчет шагов за день.
- Данные подтипа не содержат UID, но связанные данные имеют отдельные UID.
- Данные подтипов должны быть выровнены в сеансе с последовательными временными метками, которые не перекрываются. Однако допускаются пробелы.
- Сеансы полезны, если пользователь хочет, чтобы данные были связаны с сеансом (и отслеживались как его часть), а не записывались непрерывно.
сеансы сна
Вы можете читать и записывать данные о сне в Health Connect. Данные о сне отображаются в виде сеанса и могут быть разделены на 8 отдельных фаз сна:
-
UNKNOWN
: Не указано или неизвестно, спит ли пользователь. -
AWAKE
: Пользователь бодрствует в течение цикла сна, а не в течение дня. -
SLEEPING
: Общее или недетализированное описание сна. -
OUT_OF_BED
: Пользователь встает с постели во время сеанса сна. -
AWAKE_IN_BED
: Пользователь не спит в постели. -
LIGHT
: Пользователь находится в фазе легкого сна. -
DEEP
: Пользователь находится в фазе глубокого сна. -
REM
: Пользователь находится в фазе быстрого сна.
Эти значения отражают тип сна пользователя в определённом диапазоне времени. Запись стадий сна необязательна, но рекомендуется, если она доступна.
Запишите сеансы сна
Тип данных SleepSessionRecord
состоит из двух частей:
- Общий сеанс, охватывающий всю продолжительность сна.
- Отдельные стадии во время сеанса сна, такие как легкий сон или глубокий сон.
Вот как вставить сеанс сна без стадий:
SleepSessionRecord(
title = "weekend sleep",
startTime = startTime,
endTime = endTime,
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
)
Вот как добавить стадии, охватывающие весь период сеанса сна:
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,
)
Прочитайте сеанс сна
Для каждого возвращенного сеанса сна необходимо проверить, присутствуют ли также данные о стадиях сна:
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
}
}
Удалить сеанс сна
Вот как удалить сеанс. В этом примере мы использовали сеанс сна:
suspend fun deleteSleepSession(
healthConnectClient: HealthConnectClient,
sleepRecord: SleepSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
}