Health Connect'te oturum, kullanıcının belirli bir işlem gerçekleştirdiği zaman aralığıdır.
etkinliği'ne dokunun. Hem SleepSessionRecord
hem de ExerciseSessionRecord
veri türü
anlamına gelir.
Oturumlar, kullanıcıların belirli bir zaman dilimi içindeki zamana dayalı performansı ölçmesine olanak tanır. sürekli nabız veya konum verileri gibi.
ExerciseSessionRecord
seansında koşudan başlayıp koşuya kadar çeşitli
badmintona.
SleepSessionRecord
oturum, uyku aşamalarını kaydeden veriler içeriyor. Örneğin:
AWAKE
, SLEEPING
ve DEEP
.
Alt tür veriler "ait" verilerdir anlamına gelir ve yalnızca veli oturumuyla okunur, ör. uyku aşaması, egzersiz segmenti.
İlişkilendirilmiş veriler, Record
verileri ayrı ayrı veya diğer verilerle birlikte okunabilir mi?
oturumlar, ör. adım, nabız.
Genel kurallar
Sağlık bölümünde oturumlarla çalışmayla ilgili bazı en iyi uygulama yönergeleri aşağıda verilmiştir. Bağlan'a dokunun.
- Oturumlar, belirli bir antrenman veya aktiviteye ait verileri eklemek için kullanılmalıdır ya da uyku için:
suspend fun writeExerciseSession(healthConnectClient: HealthConnectClient) {
healthConnectClient.insertRecords(
listOf(
ExerciseSessionRecord(
startTime = Instant.parse("2022-05-10T10:00:00.000Z"),
startZoneOffset = ZoneOffset.of("-08:00"),
endTime = Instant.parse("2022-05-10T11:00:00.000Z"),
endZoneOffset = ZoneOffset.of("-08:00"),
exerciseType = ExerciseSessionRecord.ExerciseType.WALKING,
title = "My Walk"
),
StepsRecord(
startTime = Instant.parse("2022-05-10T10:00:00.000Z"),
startZoneOffset = ZoneOffset.of("-08:00"),
endTime = Instant.parse("2022-05-10T10:30:00.000Z"),
endZoneOffset = ZoneOffset.of("-08:00"),
count = 2800
),
StepsRecord(
startTime = Instant.parse("2022-05-10T10:30:00.000Z"),
startZoneOffset = ZoneOffset.of("-08:00"),
endTime = Instant.parse("2022-05-10T11:00:00.000Z"),
endZoneOffset = ZoneOffset.of("-08:00"),
count = 3200
),
)
)
}
- Oturumlar, günlük adım gibi genel ölçümler için kullanılmamalıdır. sayılır.
- Alt tür verileri UID içermiyor, ancak ilişkili verilerin farklı UID'leri var.
- Bir oturumda alt tür verilerinin sıralı zaman damgalarıyla uyumlu hale getirilmesi gerekir reklamlar oluşturun. Ancak boşluklara izin verilir.
- Oturumlar, kullanıcı verilerin ilişkilendirilmesini istediğinde (ve bir oturumun parçası olarak izlenir).
Uyku seansı
Health Connect'te uyku verilerini okuyabilir veya yazabilirsiniz. Uyku verileri şu şekilde görüntülenir: seansı içerir ve 8 ayrı uyku aşamasına ayrılabilir:
UNKNOWN
: Kullanıcı uyuyorsa belirtilmemiş veya bilinmiyor.AWAKE
: Kullanıcı gün içinde değil, uyku döngüsünde uyanıktır.SLEEPING
: Genel veya granüler olmayan uyku açıklaması.OUT_OF_BED
: Kullanıcı bir uyku seansının ortasında yataktan kalkıyor.AWAKE_IN_BED
: Kullanıcı yatakta uyanıktır.LIGHT
: Kullanıcı hafif bir uyku döngüsündedir.DEEP
: Kullanıcı, derin uyku döngüsündedir.REM
: Kullanıcı REM uyku döngüsündedir.
Bu değerler, kullanıcının belirli bir zaman aralığında yaşadığı uyku türünü temsil eder. Uyku aşamalarını yazmak isteğe bağlıdır ancak varsa önerilir.
Uyku aşamaları içeren veya olmayan uyku seanslarını yazma
SleepSessionRecord
veri türünün iki bölümü vardır:
- Uyku süresinin tamamını kapsayan genel oturum.
- Uyku seansında hafif uyku veya derin uyku gibi ayrı aşamalar uyku.
Aşamalar olmadan uyku seansını şu şekilde ekleyebilirsiniz:
SleepSessionRecord(
title = "weekend sleep",
startTime = startTime,
endTime = endTime,
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
)
Bir uyku seansının tüm süresini kapsayan aşamaları nasıl ekleyeceğiniz aşağıda anlatılmıştır:
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 evresi verilerinin şunları da içerir:
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 seansını silme
Bu adımları izleyerek oturumları silebilirsiniz. Bu örnekte bir uyku seansını kullandık:
suspend fun deleteSleepSession(
healthConnectClient: HealthConnectClient,
sleepRecord: SleepSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
}
Egzersiz seansları
Egzersiz seansları koşudan badmintona kadar her şeyi kapsayabilir.
Egzersiz seanslarını yazma
Oturum içeren bir kampanya isteği aşağıdaki gibi oluşturulur:
suspend fun writeExerciseSession(healthConnectClient: HealthConnectClient) {
healthConnectClient.insertRecords(
listOf(
ExerciseSessionRecord(
startTime = START_TIME,
startZoneOffset = START_ZONE_OFFSET,
endTime = END_TIME,
endZoneOffset = END_ZONE_OFFSET,
exerciseType = ExerciseSessionRecord.ExerciseType.RUNNING,
title = "My Run"
),
DistanceRecord(
startTime = START_TIME,
startZoneOffset = START_ZONE_OFFSET,
endTime = END_TIME,
endZoneOffset = END_ZONE_OFFSET,
distance = 5000.meters
),
// ... other records
)
)
}
Önceki örnekte Distance
için bir kaydın nasıl eklendiğini kontrol edin.
oturum süresinin tamamını kapsayabilir, ancak veriler farklı
ayrıntı düzeyini etkiler.
Uygulama, koşu sırasında mesafeyi düzenli olarak ölçtüyse diğer bir yaklaşım her biri mesafeyi temsil eden pek çok Mesafe kaydı çalışmasının bir kısmında ele alındı.
Egzersiz seansını okuma
Aşağıda, egzersiz oturumunun nasıl okunacağına dair bir örnek verilmiştir:
suspend fun readExerciseSessions(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
val response =
healthConnectClient.readRecords(
ReadRecordsRequest(
ExerciseSessionRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (exerciseRecord in response.records) {
// Process each exercise record
// Optionally pull in with other data sources of the same time range.
val distanceRecord =
healthConnectClient
.readRecords(
ReadRecordsRequest(
DistanceRecord::class,
timeRangeFilter =
TimeRangeFilter.between(
exerciseRecord.startTime,
exerciseRecord.endTime
)
)
)
.records
}
}
Alt tür verilerini yazma
Oturumlar, zorunlu olmayan alt tür verilerinden de oluşabilir ve bu veriler, daha fazla bilgi içeren oturuma göz atın.
Örneğin, egzersiz oturumları ExerciseSegment
, ExerciseLap
içerebilir.
ve ExerciseRoute
sınıf:
val segments = listOf(
ExerciseSegment(
startTime = Instant.parse("2022-01-02T10:10:10Z"),
endTime = Instant.parse("2022-01-02T10:10:13Z"),
segmentType = ActivitySegmentType.BENCH_PRESS,
repetitions = 373
)
)
val laps = listOf(
ExerciseLap(
startTime = Instant.parse("2022-01-02T10:10:10Z"),
endTime = Instant.parse("2022-01-02T10:10:13Z"),
length = 0.meters
)
)
ExerciseSessionRecord(
exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_CALISTHENICS,
startTime = Instant.parse("2022-01-02T10:10:10Z"),
endTime = Instant.parse("2022-01-02T10:10:13Z"),
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
segments = segments,
laps = laps,
route = route
)
Egzersiz seanslarını silme
Bir egzersiz oturumunu silmenin iki yolu vardır:
- Zaman aralığına göre.
- UID ile.
Alt tür verilerini zaman aralığına göre nasıl sileceğiniz aşağıda açıklanmıştır:
suspend fun deleteExerciseSession(
healthConnectClient: HealthConnectClient,
exerciseRecord: ExerciseSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
// delete the associated distance record
healthConnectClient.deleteRecords(DistanceRecord::class, timeRangeFilter)
}
Alt tür verilerini UID'ye göre de silebilirsiniz. Ancak bunu yaptığınızda olduğunu, bununla ilgili verileri değil, egzersiz oturumunun
suspend fun deleteExerciseSession(
healthConnectClient: HealthConnectClient,
exerciseRecord: ExerciseSessionRecord,
) {
healthConnectClient.deleteRecords(
ExerciseSessionRecord::class,
recordIdsList = listOf(exerciseRecord.metadata.id),
clientRecordIdsList = emptyList()
)
}