อ่านข้อมูลรวม

การรวบรวมข้อมูลใน Health Connect ประกอบด้วยการรวบรวมข้อมูลพื้นฐานหรือการรวบรวมข้อมูลเป็นกลุ่ม เวิร์กโฟลว์ต่อไปนี้แสดงวิธีดำเนินการทั้ง 2 อย่าง

การรวมข้อมูลพื้นฐาน

หากต้องการใช้การรวมข้อมูลพื้นฐานกับข้อมูล ให้ใช้ฟังก์ชัน aggregate ในออบเจ็กต์ HealthConnectClient โดยรับออบเจ็กต์ AggregateRequest ที่คุณเพิ่มประเภทเมตริกและช่วงเวลาเป็นพารามิเตอร์ วิธีเรียกข้อมูลสรุปพื้นฐานจะขึ้นอยู่กับประเภทเมตริกที่ใช้

การรวมแบบสะสม

การรวมแบบสะสมจะคํานวณค่าทั้งหมด

ตัวอย่างต่อไปนี้แสดงวิธีรวมข้อมูลสําหรับประเภทข้อมูล

suspend fun aggregateDistance(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        // The result may be null if no data is available in the time range
        val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L
    } catch (e: Exception) {
        // Run error handling here
    }
}

การรวมข้อมูลทางสถิติ

การรวมข้อมูลทางสถิติจะคํานวณค่าต่ำสุด ค่าสูงสุด หรือค่าเฉลี่ยของระเบียนที่มีตัวอย่าง

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

suspend fun aggregateHeartRate(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response =
            healthConnectClient.aggregate(
                AggregateRequest(
                    setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
                )
            )
        // The result may be null if no data is available in the time range
        val minimumHeartRate = response[HeartRateRecord.BPM_MIN]
        val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
    } catch (e: Exception) {
        // Run error handling here
    }
}

ถัง

นอกจากนี้ Health Connect ยังช่วยให้คุณรวบรวมข้อมูลไว้ในที่เก็บข้อมูลได้ด้วย กลุ่มที่เก็บข้อมูล 2 ประเภทที่คุณใช้ได้ ได้แก่ duration และ period

เมื่อเรียกใช้แล้ว ฟีเจอร์นี้จะแสดงรายการที่เก็บข้อมูล โปรดทราบว่ารายการอาจมีความกระจัดกระจาย ดังนั้นที่เก็บข้อมูลจะไม่รวมอยู่ในรายการหากไม่มีข้อมูล

ระยะเวลา

ในกรณีนี้ ระบบจะแบ่งข้อมูลรวมออกเป็นกลุ่มภายในระยะเวลาที่กําหนด เช่น 1 นาทีหรือ 1 ชั่วโมง หากต้องการรวบรวมข้อมูลเป็นกลุ่ม ให้ใช้ aggregateGroupByDuration โดยรับออบเจ็กต์ AggregateGroupByDurationRequest ที่คุณเพิ่มประเภทเมตริก ช่วงเวลา และ Duration เป็นพารามิเตอร์

ตัวอย่างต่อไปนี้แสดงการรวมขั้นตอนเป็นกลุ่มขนาด 1 นาที

suspend fun aggregateStepsIntoMinutes(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByDuration(
                AggregateGroupByDurationRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Duration.ofMinutes(1L)
                )
            )
        for (durationResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = durationResult.result[StepsRecord.COUNT_TOTAL]
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

จุด

ในกรณีนี้ ระบบจะแบ่งข้อมูลรวมออกเป็นกลุ่มภายในระยะเวลาตามวันที่ เช่น สัปดาห์หรือเดือน หากต้องการรวบรวมข้อมูลเป็นกลุ่ม ให้ใช้ aggregateGroupByPeriod โดยรับออบเจ็กต์ AggregateGroupByPeriodRequest ที่คุณเพิ่มประเภทเมตริก ช่วงเวลา และ Period เป็นพารามิเตอร์

ตัวอย่างต่อไปนี้แสดงการรวมขั้นตอนเป็นกลุ่มรายเดือน

suspend fun aggregateStepsIntoMonths(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByPeriod(
                AggregateGroupByPeriodRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Period.ofMonths(1)
                )
            )
        for (monthlyResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

ข้อจำกัดในการอ่าน

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

ข้อจำกัด 30 วัน

แอปพลิเคชันจะอ่านข้อมูลจาก Health Connect ได้สูงสุด 30 วันก่อนวันที่มีการให้สิทธิ์เป็นครั้งแรก

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

ตัวอย่าง 30 วัน

หากผู้ใช้ให้สิทธิ์การอ่านแก่แอปพลิเคชันของคุณเป็นครั้งแรกในวันที่ 30 มีนาคม 2023 ข้อมูลล่าสุดที่แอปจะอ่านย้อนกลับได้จะมาจากวันที่ 28 กุมภาพันธ์ 2023 เป็นต้นไป

จากนั้นผู้ใช้ลบแอปของคุณในวันที่ 10 พฤษภาคม 2023 ผู้ใช้ตัดสินใจที่จะติดตั้งแอปอีกครั้งในวันที่ 15 พฤษภาคม 2023 และมอบสิทธิ์การอ่าน วันที่ที่เร็วที่สุดที่แอปจะอ่านข้อมูลได้คือ15 เมษายน 2023

อ่านข้อมูลที่มีอายุมากกว่า 30 วัน

หากต้องการอ่านข้อมูลที่มีอายุมากกว่า 30 วัน คุณต้องขอสิทธิ์ PERMISSION_READ_HEALTH_DATA_HISTORY หากไม่มีสิทธิ์นี้ การพยายามอ่านระเบียนเดียวที่เก่ากว่า 30 วันจะทำให้เกิดข้อผิดพลาด นอกจากนี้ คุณยังอ่านข้อมูลที่เก่ากว่า 30 วันโดยใช้คําขอช่วงเวลาไม่ได้