קריאה של נתונים נצברים

צבירת הנתונים ב-Health Connect כוללת צבירת נתונים או צבירה בסיסית לקטגוריות. תהליכי העבודה הבאים מראים איך לבצע את שתי הפעולות.

צבירה בסיסית

כדי להשתמש בצבירה בסיסית של הנתונים, אפשר להשתמש בפונקציה 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.

אחרי הקריאה, הוא מחזיר רשימה של קטגוריות. שימו לב שהרשימה יכולה להיות קטנה, לכן קטגוריה לא תיכלל ברשימה אם היא לא מכילה נתונים.

משך הזמן

במקרה הזה, נתונים נצברים מפוצלים לקטגוריות באורך קבוע של זמן, כמו דקה או שעה. כדי לצבור נתונים בקטגוריות, צריך להשתמש 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
    }
}

נקודה

במקרה הזה, נתונים נצברים מחולקים לקטגוריות בסכום מבוסס-תאריך זמן, כמו שבוע או חודש. כדי לצבור נתונים בקטגוריות, צריך להשתמש 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.