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

การรวมข้อมูลใน 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 ยังให้คุณรวมข้อมูลลงในที่เก็บข้อมูลได้ด้วย ประเภท ที่เก็บข้อมูลที่คุณสามารถใช้ประกอบด้วย duration และ period

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

ระยะเวลา

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

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

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
    }
}

ระยะเวลา

ในกรณีนี้ ข้อมูลรวมจะแยกออกเป็นที่เก็บข้อมูลภายในจำนวนที่อิงตามวันที่ เช่น 1 สัปดาห์หรือ 1 เดือน ในการรวมข้อมูลลงในที่เก็บข้อมูล ให้ใช้ 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 วัน

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

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

ตัวอย่าง

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

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