Oturum

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:

  1. Uyku süresinin tamamını kapsayan genel oturum.
  2. 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:

  1. Zaman aralığına göre.
  2. 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()
    )
}