Este guia é compatível com a versão 1.1.0-alpha11 do Health Connect.
O Conexão Saúde oferece um tipo de dados de sessão de sono para armazenar informações sobre
o sono de um usuário, como uma sessão noturna ou uma soneca diurna.
O tipo de dados SleepSessionRecord
é usado para representar essas sessões.
As sessões permitem que os usuários meçam a performance com base no tempo durante um período, como frequência cardíaca contínua ou dados de local.
As sessões SleepSessionRecord
contêm dados que registram os estágios do sono, como
AWAKE
, SLEEPING
e DEEP
.
Os dados de subtipo são aqueles que "pertencem" a uma sessão e que só são significativos quando lidos com uma sessão mãe. Por exemplo, estágio do sono.
Disponibilidade do recurso
Não há uma flag de disponibilidade de recurso para esse tipo de dados.
Permissões necessárias
O acesso às sessões de sono é protegido pelas seguintes permissões:
android.permission.health.READ_SLEEP
android.permission.health.WRITE_SLEEP
Declare essas permissões no Play Console para seu app e no manifesto dele:
<application>
<uses-permission
android:name="android.permission.health.READ_SLEEP" />
<uses-permission
android:name="android.permission.health.WRITE_SLEEP" />
...
</application>
Você é responsável por declarar todas as permissões adequadas que pretende usar nos seus dispositivos e apps. Verifique também se cada permissão foi concedida pelo usuário antes do uso.
Diretrizes gerais
Confira algumas práticas recomendadas para trabalhar com sessões de sono na Conexão Saúde.
- Use as sessões para adicionar dados de uma sessão de sono específica de sono:
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"
),
)
)
}
- As sessões não são usadas para medições gerais, como contagens diárias de passos.
- Os dados de subtipo não contêm um UID, mas os dados associados têm UIDs distintos.
- Os dados de subtipo precisam estar alinhados em uma sessão com carimbos de data/hora sequenciais que não se sobrepõem. No entanto, lacunas são permitidas.
- As sessões são úteis quando o usuário quer que os dados sejam associados e monitorados como parte de uma sessão, em vez de registrados continuamente.
Sessões de sono
Você pode ler ou gravar dados de sono na Conexão Saúde. Os dados de sono são mostrados como uma sessão e podem ser divididos em oito estágios distintos de sono:
UNKNOWN
: não especificado ou desconhecido se o usuário estiver dormindo.AWAKE
: o usuário está acordado durante o período de um ciclo de sono. Não é registrado durante o dia.SLEEPING
: descrição de sono genérica ou não granular.OUT_OF_BED
: o usuário sai da cama no meio de uma sessão de sono.AWAKE_IN_BED
: o usuário está acordado na cama.LIGHT
: o usuário está em um ciclo de sono leve.DEEP
: o usuário está em um ciclo de sono profundo.REM
: o usuário está em um ciclo de sono REM.
Esses valores representam o tipo de sono de um usuário dentro de um período. Gravar os estágios do sono é opcional. Recomendamos salvar, se possível.
Gravar sessões de sono
O tipo de dados SleepSessionRecord
têm duas partes:
- A sessão geral, que abrange toda a duração do sono.
- Estágios individuais durante a sessão de sono, como sono leve ou profundo.
Confira como inserir uma sessão de sono sem estágios:
SleepSessionRecord(
title = "weekend sleep",
startTime = startTime,
endTime = endTime,
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
)
Confira como adicionar estágios que abrangem todo o período de uma sessão de sono:
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,
)
Ler uma sessão de sono
Para cada sessão de sono retornada, verifique se os dados do estágio de sono também estão presentes:
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
}
}
Excluir uma sessão de sono
Saiba como excluir uma sessão. Neste exemplo, usamos uma sessão de sono:
suspend fun deleteSleepSession(
healthConnectClient: HealthConnectClient,
sleepRecord: SleepSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
}