قراءة البيانات المجمّعة

يشمل تجميع البيانات في 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.