เขียนข้อมูล

คำแนะนำนี้ใช้ได้กับ Health Connect เวอร์ชัน 1.1.0-alpha12

คู่มือนี้จะอธิบายกระบวนการเขียนหรืออัปเดตข้อมูลใน Health Connect

ตั้งค่าโครงสร้างข้อมูล

ก่อนเขียนข้อมูล เราต้องตั้งค่าระเบียนก่อน ข้อมูลแต่ละประเภทมีโครงสร้างที่แตกต่างกันไป โดยมีมากกว่า 50 ประเภท ดูรายละเอียดเพิ่มเติมเกี่ยวกับประเภทข้อมูลที่มีได้ในข้อมูลอ้างอิงเกี่ยวกับ Jetpack

ระเบียนพื้นฐาน

ประเภทข้อมูลจำนวนก้าวใน Health Connect จะบันทึกจำนวนก้าวที่ผู้ใช้เดินระหว่างการอ่าน จํานวนก้าวแสดงการวัดผลทั่วไปในแพลตฟอร์มสุขภาพ การออกกำลังกาย และความแข็งแรงสมบูรณ์

ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่าข้อมูลจํานวนก้าว

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 120,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    )
)

ระเบียนที่มีหน่วยวัด

Health Connect สามารถจัดเก็บค่าพร้อมกับหน่วยวัดเพื่อให้เกิดความแม่นยำ ตัวอย่างหนึ่งคือประเภทข้อมูลโภชนาการที่มีมากมายและครอบคลุม ข้อมูลนี้ประกอบด้วยช่องสารอาหารที่ไม่บังคับที่หลากหลาย ตั้งแต่คาร์โบไฮเดรตทั้งหมดไปจนถึงวิตามิน แต่ละจุดข้อมูลแสดงถึงสารอาหารที่มีแนวโน้มว่าจะได้รับจากการบริโภคอาหารหรืออาหารหนึ่งๆ

ในประเภทข้อมูลนี้ สารอาหารทั้งหมดจะแสดงในหน่วย Mass ส่วน energy จะแสดงในหน่วย Energy

ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่าข้อมูลโภชนาการสำหรับผู้ใช้ที่กินกล้วย

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(1))

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = startTime,
    endTime = endTime,
    startZoneOffset = ZoneOffset.UTC,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        device = Device(type = Device.TYPE_PHONE)
    )
)

ระเบียนที่มีข้อมูลชุด

Health Connect สามารถจัดเก็บรายการข้อมูลชุด ตัวอย่างหนึ่งคือประเภทข้อมูลอัตราการเต้นของหัวใจที่บันทึกชุดตัวอย่างการเต้นของหัวใจที่ตรวจพบระหว่างการอ่านค่า

ในประเภทข้อมูลนี้ พารามิเตอร์ samples จะแสดงด้วยรายการตัวอย่างอัตราการเต้นของหัวใจ ตัวอย่างแต่ละรายการมีค่า beatsPerMinute และค่า time

ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่าข้อมูลชุดอัตราการเต้นของหัวใจ

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(5))

val heartRateRecord = HeartRateRecord(
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = startTime + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    },
    metadata = Metadata.autoRecorded(
        device = Device(type = Device.TYPE_WATCH)
    ))

เขียนข้อมูล

เวิร์กโฟลว์ทั่วไปอย่างหนึ่งใน Health Connect คือการเขียนข้อมูล หากต้องการเพิ่มระเบียน ให้ใช้ insertRecords

ตัวอย่างต่อไปนี้แสดงวิธีเขียนจํานวนขั้นตอนในการแทรกข้อมูล

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    val endTime = Instant.now()
    val startTime = endTime.minus(Duration.ofMinutes(5))
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = startTime,
            endTime = endTime,
            startZoneOffset = ZoneOffset.UTC,
            endZoneOffset = ZoneOffset.UTC,
            metadata = Metadata.autoRecorded(
                device = Device(type = Device.TYPE_WATCH)
            )
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

อัปเดตข้อมูล

หากต้องการเปลี่ยนระเบียนอย่างน้อย 1 รายการ โดยเฉพาะเมื่อต้องซิงค์ที่เก็บข้อมูลแอปกับข้อมูลจาก Health Connect คุณสามารถอัปเดตข้อมูลได้ การอัปเดตข้อมูลที่มีอยู่ทำได้ 2 วิธี โดยขึ้นอยู่กับตัวระบุที่ใช้ค้นหาระเบียน

ข้อมูลเมตา

คุณควรตรวจสอบคลาส Metadata ก่อน เนื่องจากคลาสนี้จําเป็นเมื่ออัปเดตข้อมูล ในการสร้าง Record แต่ละรายการใน Health Connect จะมีช่อง metadata พร็อพเพอร์ตี้ต่อไปนี้เกี่ยวข้องกับการซิงค์

คุณสมบัติ คำอธิบาย
id Record แต่ละรายการใน Health Connect จะมีค่า id ที่ไม่ซ้ำกัน
Health Connect จะป้อนข้อมูลนี้โดยอัตโนมัติ เมื่อแทรกระเบียนใหม่
lastModifiedTime Record แต่ละรายการจะติดตามเวลาที่แก้ไขระเบียนครั้งล่าสุดด้วย
Health Connect จะป้อนข้อมูลนี้โดยอัตโนมัติ
clientRecordId Record แต่ละรายการจะมีรหัสที่ไม่ซ้ำกันซึ่งเชื่อมโยงกับRecord นั้นเพื่อใช้เป็นข้อมูลอ้างอิงในที่เก็บข้อมูลแอป
แอปของคุณระบุค่านี้
clientRecordVersion เมื่อระเบียนมี clientRecordId คุณจะใช้ clientRecordVersion เพื่ออนุญาตให้ข้อมูลซิงค์กับเวอร์ชันที่อยู่ใน App Datastore ได้
แอปของคุณระบุค่านี้

อัปเดตผ่านรหัสระเบียน

หากต้องการอัปเดตข้อมูล ให้เตรียมระเบียนที่จำเป็นก่อน ทำการเปลี่ยนแปลงระเบียนหากจำเป็น จากนั้นโทรหา updateRecords เพื่อทําการเปลี่ยนแปลง

ตัวอย่างต่อไปนี้แสดงวิธีอัปเดตข้อมูล ด้วยเหตุนี้ แต่ละระเบียนจึงมีการปรับค่าเขตเวลาออฟเซ็ตเป็น PST

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class, timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime, prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        healthConnectClient.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

อัปโหลดผ่านรหัสระเบียนลูกค้า

หากคุณใช้ค่ารหัสระเบียนลูกค้าและเวอร์ชันระเบียนลูกค้าที่เลือกได้ เราขอแนะนำให้ใช้ insertRecords แทน updateRecords

ฟังก์ชัน insertRecords สามารถอัปโหลดข้อมูลได้ หากมีข้อมูลใน Health Connect ตามชุดรหัสระเบียนลูกค้าที่กำหนดไว้ ระบบจะเขียนทับข้อมูลนั้น ไม่เช่นนั้น ระบบจะเขียนเป็นข้อมูลใหม่ สถานการณ์นี้มีประโยชน์เมื่อคุณต้องการซิงค์ข้อมูลจากที่เก็บข้อมูลแอปกับ Health Connect

ตัวอย่างต่อไปนี้แสดงวิธีทําการอัปเดตและเพิ่มข้อมูลในข้อมูลที่ดึงมาจากที่เก็บข้อมูลแอป

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        metadata = Metadata.autoRecorded(
            clientRecordId = "Your client record ID",
            device = Device(type = Device.TYPE_WATCH)
        ),
        // Assign more parameters for this record
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

หลังจากนั้น คุณจะเรียกใช้ฟังก์ชันเหล่านี้ในเธรดหลักได้

upsertSteps(healthConnectClient, pullStepsFromDatastore())

การตรวจสอบค่าในเวอร์ชันระเบียนลูกค้า

หากกระบวนการอัปโหลดข้อมูลของคุณมีเวอร์ชันระเบียนลูกค้า Health Connect จะดำเนินการตรวจสอบการเปรียบเทียบในค่า clientRecordVersion หากเวอร์ชันจากข้อมูลที่แทรกสูงกว่าเวอร์ชันจากข้อมูลที่มีอยู่ ระบบจะทำการอัปsert ไม่เช่นนั้น กระบวนการจะละเว้นการเปลี่ยนแปลงและค่าจะยังคงเหมือนเดิม

หากต้องการรวมเวอร์ชันไว้ในข้อมูล คุณต้องระบุค่า Metadata.clientRecordVersion ด้วยค่า Long โดยอิงตามตรรกะเวอร์ชัน

val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofMinutes(15))

val stepsRecord = StepsRecord(
    count = 100L,
    startTime = startTime,
    startZoneOffset = ZoneOffset.UTC,
    endTime = endTime,
    endZoneOffset = ZoneOffset.UTC,
    metadata = Metadata.manualEntry(
        clientRecordId = "Your supplied record ID",
        clientRecordVersion = 0L, // Your supplied record version
        device = Device(type = Device.TYPE_WATCH)
    )
)

การอัปsert จะไม่เพิ่ม version โดยอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลง เพื่อป้องกันการเขียนทับข้อมูลโดยไม่คาดคิด ในกรณีนี้ คุณต้องป้อนค่าที่สูงขึ้นด้วยตนเอง

แนวทางปฏิบัติแนะนำในการเขียนข้อมูล

แอปต้องเขียนเฉพาะข้อมูลที่มาจากแหล่งที่มาของตนเองลงใน Health Connect

หากข้อมูลในแอปของคุณนำเข้ามาจากแอปอื่น แอปดังกล่าวจะมีหน้าที่เขียนข้อมูลของตัวเองลงใน Health Connect

นอกจากนี้ คุณควรใช้ตรรกะที่จัดการข้อยกเว้นการเขียน เช่น ข้อมูลอยู่นอกขอบเขต หรือข้อผิดพลาดของระบบภายใน คุณใช้กลยุทธ์การถดถอยและลองอีกครั้งในกลไกการกําหนดเวลาการทํางานได้ หากการเขียนข้อมูลลงใน Health Connect ไม่สำเร็จในท้ายที่สุด ให้ตรวจสอบว่าแอปสามารถส่งออกข้อมูลได้ อย่าลืมบันทึกและรายงานข้อผิดพลาดเพื่อช่วยในการวินิจฉัย

เมื่อติดตามข้อมูล คุณทําตามคําแนะนํา 2-3 ข้อได้ ทั้งนี้ขึ้นอยู่กับวิธีที่แอปเขียนข้อมูล

การติดตามแบบไม่โต้ตอบ

ซึ่งรวมถึงแอปที่ทำการติดตามการออกกำลังกายหรือสุขภาพแบบไม่โต้ตอบ เช่น การบันทึกจำนวนก้าวหรืออัตราการเต้นของหัวใจอย่างต่อเนื่องในเบื้องหลัง

แอปของคุณต้องเขียนข้อมูลลงใน Health Connect เป็นระยะด้วยวิธีต่อไปนี้

  • ในการซิงค์ทุกครั้ง ให้เขียนเฉพาะข้อมูลใหม่และข้อมูลที่อัปเดตซึ่งแก้ไขนับตั้งแต่ซิงค์ครั้งล่าสุด
  • แบ่งคำขอเป็นกลุ่มๆ ละไม่เกิน 1,000 ระเบียนต่อคำขอเขียน
  • ใช้ WorkManager เพื่อกำหนดเวลางานเบื้องหลังเป็นระยะๆ โดยให้มีระยะเวลาอย่างน้อย 15 นาที
  • จำกัดให้งานทำงานเฉพาะเมื่ออุปกรณ์ไม่มีการใช้งานและแบตเตอรี่ไม่เหลือน้อย

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

การติดตามที่ใช้งานอยู่

ซึ่งรวมถึงแอปที่ทำการติดตามตามเหตุการณ์ เช่น การออกกำลังกายและการนอนหลับ หรือข้อมูลที่ผู้ใช้ป้อนด้วยตนเอง เช่น โภชนาการ ระบบจะสร้างระเบียนเหล่านี้เมื่อแอปอยู่เบื้องหน้า หรือในเหตุการณ์ที่เกิดขึ้นไม่บ่อยนักซึ่งมีการนําแอปไปใช้ 2-3 ครั้งใน 1 วัน

ตรวจสอบว่าแอปไม่ได้ทำให้ Health Connect ทำงานตลอดระยะเวลาของกิจกรรม

ข้อมูลต้องเขียนลงใน Health Connect ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

  • ซิงค์ข้อมูลลงใน Health Connect หลังจากกิจกรรมเสร็จสมบูรณ์ เช่น ซิงค์ข้อมูลเมื่อผู้ใช้สิ้นสุดเซสชันการออกกําลังกายที่ติดตาม
  • กำหนดเวลางานแบบครั้งเดียวโดยใช้ WorkManager เพื่อซิงค์ข้อมูลในภายหลัง

แนวทางปฏิบัติแนะนำสำหรับความละเอียดและความถี่ในการเขียน

เมื่อเขียนข้อมูลลงใน Health Connect ให้ใช้ความละเอียดที่เหมาะสม การใช้ความละเอียดที่เหมาะสมจะช่วยลดความจุของพื้นที่เก็บข้อมูลได้ ในขณะที่ยังคงรักษาข้อมูลที่ถูกต้องและสอดคล้องกัน การแก้ไขข้อมูลประกอบด้วย 2 ส่วน ได้แก่

  1. ความถี่ในการเขียน: ความถี่ที่แอปพลิเคชันของคุณพุชข้อมูลใหม่ไปยัง Health Connect เช่น เขียนข้อมูลใหม่ทุก 15 นาที
  2. ความละเอียดของข้อมูลที่เขียน: ความถี่ในการสุ่มตัวอย่างข้อมูลที่พุชเข้ามา เช่น เขียนตัวอย่างอัตราการเต้นของหัวใจทุก 5 วินาที ข้อมูลบางประเภทไม่จำเป็นต้องใช้อัตราตัวอย่างเดียวกัน การอัปเดตข้อมูลจํานวนก้าวทุกวินาทีมีประโยชน์เพียงเล็กน้อย เมื่อเทียบกับการอัปเดตเป็นช่วงๆ ห่างกัน เช่น ทุก 60 วินาที อย่างไรก็ตาม อัตราการสุ่มตัวอย่างที่สูงขึ้นอาจช่วยให้ผู้ใช้เห็นข้อมูลสุขภาพและการออกกำลังกายที่ละเอียดยิ่งขึ้น ความถี่ของอัตราตัวอย่างควรมีความสมดุลระหว่างรายละเอียดและประสิทธิภาพ

เขียนข้อมูลที่ตรวจสอบตลอดทั้งวัน

สําหรับข้อมูลที่รวบรวมอย่างต่อเนื่อง เช่น จํานวนก้าว แอปพลิเคชันของคุณควรเขียนลงใน Health Connect ทุก 15 นาทีตลอดทั้งวันเป็นอย่างน้อย

ประเภทข้อมูล

หน่วย

วันที่นำส่งโดยประมาณ

ตัวอย่าง

จำนวนก้าว

จำนวนก้าว

ทุกๆ 1 นาที

23:14 - 23:15 - 5 ขั้นตอน

23:16 - 23:17 - 22 ก้าว

23:17 - 23:18 - 8 ขั้นตอน

StepsCadence

ก้าว/นาที

ทุกๆ 1 นาที

23:14 - 23:15 - 5 spm

23:16 - 23:17 - 22 spm

23:17 - 23:18 - 8 spm

การทำวีลแชร์พุช

พุช

ทุกๆ 1 นาที

23:14 - 23:15 - การพุช 5 ครั้ง

23:16 - 23:17 - 22 การพุช

23:17 - 23:18 - การพุช 8 ครั้ง

ActiveCaloriesBurned

แคลอรี่

ทุก 15 นาที

23:15 - 23:30 - 2 แคลอรี่

23:30 - 23:45 - 25 แคลอรี่

23:45 - 00:00 - 5 แคลอรี่

TotalCaloriesBurned

แคลอรี่

ทุก 15 นาที

23:15 - 23:30 - 16 แคลอรี่

23:30 - 23:45 - 16 แคลอรี่

23:45 - 00:00 - 16 แคลอรี่

ระยะทาง

กม./นาที

ทุกๆ 1 นาที

23:14-23:15 - 0.008 กม.

23:16 - 23:16 - 0.021 กม.

23:17 - 23:18 - 0.012 กม.

ElevationGained

m

ทุกๆ 1 นาที

20:36 - 20:37 - 3.048m

20:39 - 20:40 - 3.048m

23:23 - 23:24 - 9.144m

จำนวนชั้นที่เดินขึ้น

ชั้น

ทุกๆ 1 นาที

23:14 - 23:15 - 5 ชั้น

23:16 - 23:16 - 22 ชั้น

23:17 - 23:18 - 8 ชั้น

HeartRate

bpm

ทุกๆ 1 นาที

06:11 น. - 55 bpm

HeartRateVariabilityRmssd

มิลลิวินาที

ทุกๆ 1 นาที

06:11 น. - 23 มิลลิวินาที

RespiratoryRate

ครั้ง/นาที

ทุกๆ 1 นาที

23:14 - 23:15 - 60 ครั้ง/นาที

23:16 - 23:16 - 62 ครั้ง/นาที

23:17 - 23:18 - 64 ครั้ง/นาที

OxygenSaturation

%

ทุกๆ 1 ชั่วโมง

6:11 - 95.208%

เขียนข้อมูลเซสชัน

ระบบควรเขียนข้อมูลลงใน Health Connect เมื่อสิ้นสุดเซสชันการออกกําลังกายหรือการนอนหลับ

เราขอแนะนำว่าเซสชันการนอนหลับหรือเซสชันการออกกำลังกายควรเขียนด้วยอุปกรณ์บันทึกและข้อมูลเมตาที่เหมาะสม ซึ่งรวมถึง RecordingMethod

อย่างน้อย แอปพลิเคชันของคุณควรเป็นไปตามคำแนะนำในคอลัมน์ "ที่คาดไว้" ด้านล่าง ทําตามคําแนะนํา "แนะนํา" เท่าที่จะทําได้

ข้อมูลที่ติดตามระหว่างออกกำลังกาย

ประเภทข้อมูล

หน่วย

วันที่นำส่งโดยประมาณ

ขอแสดงความนับถือ

ตัวอย่าง

จำนวนก้าว

จำนวนก้าว

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 5 ขั้นตอน

23:16 - 23:17 - 22 ก้าว

23:17 - 23:18 - 8 ขั้นตอน

StepsCadence

ก้าว/นาที

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 35 spm

23:16 - 23:17 - 37 spm

23:17 - 23:18 - 40 spm

การทำวีลแชร์พุช

พุช

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - การพุช 5 ครั้ง

23:16 - 23:17 - 22 การพุช

23:17 - 23:18 - การพุช 8 ครั้ง

CyclingPedalingCadence

rpm

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 65 รอบต่อนาที

23:16 - 23:17 - 70 รอบต่อนาที

23:17 - 23:18 - 68 รอบต่อนาที

พาวเวอร์

วัตต์

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 250 วัตต์

23:16 - 23:17 - 255 วัตต์

23:17 - 23:18 - 245 วัตต์

ความเร็ว

กม./นาที

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 0.3 กม./นาที

23:16 - 23:17 - 0.4 กม./นาที

23:17 - 23:18 -0.4 กม./นาที

ระยะทาง

กม./ม.

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 0.008 กม.

23:16 - 23:16 - 0.021 กม.

23:17 - 23:18 - 0.012 กม.

ActiveCaloriesBurned

แคลอรี่

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 20 แคลอรี่

23:16 - 23:17 - 20 แคลอรี่

23:17 - 23:18 - 25 แคลอรี่

TotalCaloriesBurned

แคลอรี่

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 36 แคลอรี่

23:16 - 23:17 - 36 แคลอรี่

23:17 - 23:18 - 41 แคลอรี่

ElevationGained

m

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

20:36 - 20:37 - 3.048m

20:39 - 20:40 - 3.048m

23:23 - 23:24 - 9.144m

ExerciseRoutes

lat/lng/alt

ทุก 3-5 วินาที

ทุกๆ 1 วินาที

HeartRate

bpm

ทุกๆ 1 นาที

ทุกๆ 1 วินาที

23:14-23:15 - 150 bpm

23:16 - 23:17 -152 bpm

23:17 - 23:18 - 155 bpm

ข้อมูลที่ติดตามระหว่างการนอนหลับ

ประเภทข้อมูล

หน่วย

ตัวอย่างที่คาดไว้

ตัวอย่าง

ระยะการนอนหลับ

ระยะ

ระยะเวลาแบบละเอียดตามระยะการนอนหลับ

23:46 - 23:50 - ตื่น

23:50 - 23:56 - หลับตื้น

23:56 - 00:16 - หลับลึก

RestingHeartRate

bpm

ค่ารายวันเดี่ยว (ควรเป็นค่าแรกสุดในตอนเช้า)

06:11 น. - 60 bpm

OxygenSaturation

%

ค่ารายวันเดี่ยว (ควรเป็นค่าแรกสุดในตอนเช้า)

6:11 - 95.208%