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

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