Bu kılavuz, Health Connect'in 1.1.0-alpha11 sürümüyle uyumludur.
Health Connect, kullanıcının uykusuyla ilgili bilgileri (ör. gece uykusu veya gündüz uykusu) depolamak için uyku oturumu veri türünü sağlar.
Bu oturumları temsil etmek için SleepSessionRecord
veri türü kullanılır.
Oturumlar, kullanıcıların belirli bir süre boyunca zamana dayalı performansı (ör. sürekli kalp atış hızı veya konum verileri) ölçmesine olanak tanır.
SleepSessionRecord
seansları, AWAKE
, SLEEPING
ve DEEP
gibi uyku aşamalarını kaydeden verileri içerir.
Alt tür verileri, bir oturuma "ait" olan ve yalnızca bir üst oturumla birlikte okunduğunda anlamlı olan verilerdir. Örneğin, uyku evresi.
Özellik kullanılabilirliği
Bu veri türü için özellik kullanılabilirliği işareti yok.
Gerekli izinler
Uyku oturumlarına erişim aşağıdaki izinlerle korunur:
android.permission.health.READ_SLEEP
android.permission.health.WRITE_SLEEP
Uygulamanızın manifest dosyasının yanı sıra Play Console'da da bu izinleri beyan edin:
<application>
<uses-permission
android:name="android.permission.health.READ_SLEEP" />
<uses-permission
android:name="android.permission.health.WRITE_SLEEP" />
...
</application>
Cihazlarınızda ve uygulamalarınızda kullanmayı planladığınız tüm uygun izinleri beyan etmek sizin sorumluluğunuzdadır. Ayrıca, her iznin kullanımdan önce kullanıcı tarafından verildiğini de kontrol etmeniz gerekir.
Genel kurallar
Health Connect'te uyku oturumlarıyla çalışma hakkında bazı en iyi uygulama yönergelerini aşağıda bulabilirsiniz.
- Oturumlar, belirli bir uyku oturumundan veri eklemek için kullanılmalıdır: uyku için:
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"
),
)
)
}
- Oturumlar, günlük adım sayısı gibi genel ölçümler için kullanılmamalıdır.
- Alt tür verileri UID içermez ancak ilişkili verilerde farklı UID'ler bulunur.
- Alt tür verilerinin, çakışmayan sıralı zaman damgalarıyla bir oturumda hizalanması gerekir. Ancak boşluklara izin verilir.
- Kullanıcı, verilerin sürekli olarak kaydedilmesi yerine bir oturumla ilişkilendirilmesini (ve oturumun bir parçası olarak izlenmesini) istiyorsa oturumlar kullanışlıdır.
Uyku seansları
Health Connect'te uyku verilerini okuyabilir veya yazabilirsiniz. Uyku verileri oturum olarak gösterilir ve 8 farklı uyku aşamasına ayrılabilir:
UNKNOWN
: Kullanıcının uyuyup uyumadığı belirtilmemiş veya bilinmiyor.AWAKE
: Kullanıcı, gündüz değil uyku döngüsü içinde uyanıktır.SLEEPING
: Genel veya ayrıntılı olmayan uyku açıklaması.OUT_OF_BED
: Kullanıcı, uyku seansının ortasında yataktan kalkar.AWAKE_IN_BED
: Kullanıcı yatakta uyanıktır.LIGHT
: Kullanıcı hafif uyku döngüsündedir.DEEP
: Kullanıcı derin uyku döngüsündedir.REM
: Kullanıcı REM uykusu döngüsündedir.
Bu değerler, kullanıcının belirli bir zaman aralığında yaşadığı uyku türünü gösterir. Uyku aşamalarını yazmak isteğe bağlıdır ancak mümkünse önerilir.
Uyku seanslarını yazma
SleepSessionRecord
veri türü iki bölümden oluşur:
- Tüm uyku süresini kapsayan genel oturum.
- Uyku oturumu sırasındaki aşamalar (ör. hafif uyku veya derin uyku).
Aşamalar olmadan uyku seansı eklemek için:
SleepSessionRecord(
title = "weekend sleep",
startTime = startTime,
endTime = endTime,
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
)
Uyku seansının tamamını kapsayan aşamaları eklemek için:
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,
)
Uyku seansını okuma
Döndürülen her uyku oturumu için uyku aşaması verilerinin de mevcut olup olmadığını kontrol etmeniz gerekir:
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
}
}
Uyku oturumunu silme
Oturumları silmek için aşağıdaki adımları uygulayın. Bu örnekte, uyku oturumu kullandık:
suspend fun deleteSleepSession(
healthConnectClient: HealthConnectClient,
sleepRecord: SleepSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
}