การรวมข้อมูลใน Health Connect มีทั้งการรวมข้อมูลพื้นฐานหรือการรวมข้อมูลเป็นที่เก็บข้อมูล เวิร์กโฟลว์ต่อไปนี้จะแสดงวิธีดำเนินการทั้ง 2 อย่าง
การรวมข้อมูลพื้นฐาน
หากต้องการใช้การรวมข้อมูลพื้นฐานกับข้อมูล ให้ใช้ฟังก์ชัน aggregate ในออบเจ็กต์ HealthConnectClient ฟังก์ชันนี้ยอมรับออบเจ็กต์
AggregateRequest ซึ่งคุณจะเพิ่มประเภทเมตริก
และช่วงเวลาเป็นพารามิเตอร์ วิธีเรียกข้อมูลรวมพื้นฐานจะขึ้นอยู่กับประเภทเมตริกที่ใช้
การรวมข้อมูลสะสม
การรวมข้อมูลสะสมจะคำนวณค่าทั้งหมด
ตัวอย่างต่อไปนี้แสดงวิธีรวมข้อมูลสำหรับประเภทข้อมูล
suspend fun readDistanceAggregate(startTime: Instant, endTime: Instant): Number { val response = healthConnectClient.aggregate( AggregateRequest( metrics = setOf(DistanceRecord.DISTANCE_TOTAL), timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) return response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L }
กรองตามแหล่งที่มาของข้อมูล
นอกจากนี้ คุณยังกรองข้อมูลรวมตามแหล่งที่มาได้ด้วย เช่น รวมเฉพาะข้อมูลที่เขียนโดยแอปที่เฉพาะเจาะจง
ตัวอย่างต่อไปนี้แสดงวิธีใช้ dataOriginFilter และ
AggregateRequest เพื่อรวมจำนวนก้าวจากแอปที่เฉพาะเจาะจง
suspend fun aggregateStepsFromSpecificApp( healthConnectClient: HealthConnectClient, startTime: Instant, endTime: Instant, appPackageName: String ) { try { val response = healthConnectClient.aggregate( AggregateRequest( metrics = setOf(StepsRecord.COUNT_TOTAL), timeRangeFilter = TimeRangeFilter.between(startTime, endTime), dataOriginFilter = setOf(DataOrigin(appPackageName)) ) ) // The result may be null if no data is available in the time range val totalSteps = response[StepsRecord.COUNT_TOTAL] ?: 0L } catch (e: Exception) { // Run error handling here } }
การรวมข้อมูลทางสถิติ
การรวมข้อมูลทางสถิติจะคำนวณค่าต่ำสุด สูงสุด หรือค่าเฉลี่ยของบันทึกที่มีตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีใช้การรวมข้อมูลทางสถิติ
suspend fun readHeartRateAggregate(startTime: Instant, endTime: Instant): Pair<Long, Long> { val response = healthConnectClient.aggregate( AggregateRequest( metrics = setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN), timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) val minimumHeartRate = response[HeartRateRecord.BPM_MIN] ?: 0L val maximumHeartRate = response[HeartRateRecord.BPM_MAX] ?: 0L return maximumHeartRate to minimumHeartRate }
ที่เก็บข้อมูล
Health Connect ยังให้คุณรวมข้อมูลเป็น ที่เก็บข้อมูลได้ด้วย ที่เก็บข้อมูลที่คุณใช้ได้มี 2 ประเภท ได้แก่ ระยะเวลา และระยะเวลา
เมื่อเรียกใช้แล้ว ฟังก์ชันเหล่านี้จะแสดงผลรายการที่เก็บข้อมูล โปรดทราบว่ารายการอาจมีข้อมูลไม่ครบถ้วน ดังนั้นระบบจะไม่รวมที่เก็บข้อมูลไว้ในรายการหากที่เก็บข้อมูลนั้นไม่มีข้อมูล
ระยะเวลา
ในกรณีนี้ ระบบจะแบ่งข้อมูลรวมออกเป็นที่เก็บข้อมูลภายในระยะเวลาที่กำหนด เช่น 1 นาทีหรือ 1 ชั่วโมง หากต้องการรวมข้อมูลเป็นที่เก็บข้อมูล ให้ใช้
aggregateGroupByDuration ฟังก์ชันนี้ยอมรับออบเจ็กต์
AggregateGroupByDurationRequest ซึ่งคุณจะเพิ่มประเภทเมตริก ช่วงเวลา และ Duration เป็นพารามิเตอร์
คุณสามารถใช้คู่ของ Instant หรือ
LocalDateTime ออบเจ็กต์สำหรับ startTime และ endTime ใน
TimeRangeFilter
ตัวอย่างต่อไปนี้แสดงการรวมจำนวนก้าวเป็นที่เก็บข้อมูลที่มีระยะเวลา 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] ?: 0L } } 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] ?: 0L } } catch (e: Exception) { // Run error handling here } }
ข้อจำกัดในการอ่าน
โดยค่าเริ่มต้น แอปพลิเคชันทั้งหมดสามารถอ่านข้อมูลจาก Health Connect ได้เป็นเวลาสูงสุด 30 วันก่อนวันที่ได้รับสิทธิ์ครั้งแรก
หากต้องการขยายสิทธิ์อ่านนอกเหนือจากข้อจำกัด
เริ่มต้น ให้ขอ
PERMISSION_READ_HEALTH_DATA_HISTORY
ไม่เช่นนั้น หากไม่มีสิทธิ์นี้ การพยายามอ่านบันทึกที่เก่ากว่า 30 วันจะทำให้เกิดข้อผิดพลาด
ประวัติสิทธิ์ของแอปที่ถูกลบ
หากผู้ใช้ลบแอปของคุณ ระบบจะเพิกถอนสิทธิ์ทั้งหมด รวมถึงสิทธิ์ประวัติ หากผู้ใช้ติดตั้งแอปของคุณอีกครั้งและให้สิทธิ์อีกครั้ง ข้อจำกัดเริ่มต้นเดียวกันจะมีผล และแอปของคุณจะอ่านข้อมูลจาก Health Connect ได้เป็นเวลาสูงสุด 30 วันก่อนวันที่ใหม่นั้น
เช่น สมมติว่าผู้ใช้ลบแอปของคุณในวันที่ 10 พฤษภาคม 2023 จากนั้นติดตั้งแอปอีกครั้งในวันที่ 15 พฤษภาคม 2023 และให้สิทธิ์อ่าน วันที่เร็วที่สุดที่แอปของคุณจะอ่านข้อมูลได้โดยค่าเริ่มต้นคือ15 เมษายน 2023
ข้อมูลรวมที่ได้รับผลกระทบจากลำดับความสำคัญของแอปที่ผู้ใช้เลือก
ผู้ใช้ปลายทางสามารถกำหนดลำดับความสำคัญสำหรับแอปการนอนหลับและแอปกิจกรรมที่ผสานรวมกับ Health Connect มีเพียงผู้ใช้ปลายทางเท่านั้นที่สามารถเปลี่ยนแปลงรายการลำดับความสำคัญเหล่านี้ได้ เมื่อคุณอ่านข้อมูลรวม API การรวมจะพิจารณาข้อมูลที่ซ้ำกันและเก็บเฉพาะข้อมูลจากแอปที่มีลำดับความสำคัญสูงสุด ข้อมูลที่ซ้ำกันอาจเกิดขึ้นได้หากผู้ใช้มีแอปหลายแอปที่เขียนข้อมูลประเภทเดียวกัน เช่น จำนวนก้าวที่เดินหรือระยะทางที่เคลื่อนที่ได้ ในเวลาเดียวกัน
ดูข้อมูลเกี่ยวกับวิธีที่ผู้ใช้ปลายทางจัดลำดับความสำคัญของแอปได้ที่ ดูจัดการข้อมูล Health Connect
ผู้ใช้สามารถเพิ่มหรือนำแอปออก รวมถึงเปลี่ยนลำดับความสำคัญของแอปได้ ผู้ใช้อาจต้องการนำแอปที่เขียนข้อมูลซ้ำออกเพื่อให้ผลรวมของข้อมูลในหน้าจอ Health Connect เหมือนกับแอปที่ผู้ใช้ให้ลำดับความสำคัญสูงสุด ระบบจะอัปเดตผลรวมของข้อมูลแบบเรียลไทม์
แม้ว่า API การรวมจะคำนวณข้อมูลของแอปกิจกรรมและแอปการนอนหลับโดยการลบข้อมูลที่ซ้ำกันตามวิธีที่ผู้ใช้ตั้งค่าลำดับความสำคัญไว้ แต่คุณยังคงสร้างตรรกะของคุณเองเพื่อคำนวณข้อมูลแยกกันสำหรับแต่ละแอปที่เขียนข้อมูลนั้นได้
Health Connect จะลบข้อมูลที่ซ้ำกันเฉพาะข้อมูลประเภทกิจกรรมและข้อมูลการนอนหลับเท่านั้น และผลรวมของข้อมูลที่แสดงจะเป็นค่าหลังจากที่ API การรวมลบข้อมูลที่ซ้ำกันแล้ว ผลรวมเหล่านี้จะแสดงข้อมูลของวันล่าสุดที่ข้อมูลจำนวนก้าวและระยะทางมีอยู่ สำหรับข้อมูลประเภทอื่นๆ ผลลัพธ์รวมจะรวมข้อมูลทั้งหมดของประเภทนั้นใน Health Connect จากแอปทั้งหมดที่เขียนข้อมูล
การอ่านอยู่เบื้องหลัง
คุณขอให้แอปพลิเคชันทำงานอยู่เบื้องหลังและอ่านข้อมูลจาก Health Connect ได้ หากคุณขอสิทธิ์ อ่านอยู่เบื้องหลัง ผู้ใช้จะให้สิทธิ์แอปของคุณในการอ่านข้อมูลอยู่เบื้องหลังได้
ประเภทข้อมูลรวมที่รองรับตามบันทึก
ตารางนี้แสดงรายการประเภทข้อมูลรวมทั้งหมดที่รองรับตามบันทึก Health Connect