خواندن داده‌های تجمیعی

تجمیع داده‌ها در Health Connect شامل تجمیع‌های پایه یا تجمیع داده‌ها در دسته‌ها می‌شود. جریان‌های کار زیر نحوه انجام هر دو را به شما نشان می‌دهد.

انبوهش پایه

برای استفاده از تجمیع پایه روی داده‌هایتان، از تابع 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 همچنین می‌تواند به شما امکان دهد داده‌ها را در دسته‌ها جمع‌آوری کنید. دو نوع باکت که می‌توانید استفاده کنید شامل مدت و دوره است.

پس‌از فراخوانی، فهرستی از دسته‌ها را برمی‌گردانند. توجه داشته باشید که فهرست می‌تواند پراکنده باشد، بنابراین اگر دسته‌ای حاوی داده نباشد، در فهرست گنجانده نمی‌شود.

مدت

در این مورد، داده‌های تجمیعی در بازه‌های زمانی ثابت، مانند یک دقیقه یا یک ساعت، به دسته‌های مختلف تقسیم می‌شوند. برای تجمیع داده‌ها در دسته‌ها، از aggregateGroupByDuration استفاده کنید. این تابع شیء AggregateGroupByDurationRequest را می‌پذیرد که در آن انواع معیار، محدوده زمانی، و Duration را به‌عنوان پارامتر اضافه می‌کنید. می‌توانید از جفت‌های Instant یا LocalDateTime شیء برای startTime و endTime در TimeRangeFilter استفاده کنید.

در زیر، نمونه‌ای از تجمیع گام‌ها در بازه‌های زمانی یک دقیقه‌ای نشان داده شده است:

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

نقطه

در این مورد، داده‌های تجمیعی در بازه‌های زمانی مبتنی بر تاریخ، مانند یک هفته یا یک ماه، به دسته‌های مختلف تقسیم می‌شوند. برای تجمیع داده‌ها در دسته‌ها، از 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 را تا ۳۰ روز قبل‌از زمانی که اولین اجازه اعطا شده است بخوانند.

اگر نیاز دارید اجازه‌های خواندن را فراتر از هریک از محدودیت‌های پیش‌فرض گسترش دهید، PERMISSION_READ_HEALTH_DATA_HISTORY را درخواست کنید. درغیراین‌صورت، بدون این اجازه، تلاش برای خواندن سوابق قدیمی‌تر از ۳۰ روز منجر به خطا می‌شود.

سابقه اجازه‌های برنامه حذف‌شده

اگر کاربری برنامه شما را حذف کند، همه اجازه‌ها، ازجمله اجازه سابقه، لغو می‌شود. اگر کاربر برنامه‌تان را دوباره نصب کند و اجازه را دوباره اعطا کند، همان محدودیت‌های پیش‌فرض اعمال می‌شود و برنامه شما می‌تواند داده‌های Health Connect را تا ۳۰ روز قبل‌از آن تاریخ جدید بخواند.

برای مثال، فرض کنید کاربر برنامه شما را در ۱۰ مه ۲۰۲۳ حذف کند و سپس برنامه را در ۱۵ مه ۲۰۲۳ بازنصب کند و اجازه‌های خواندن را اعطا کند. از این پس، اولین تاریخی که برنامه‌تان می‌تواند به‌طور پیش‌فرض داده‌ها را از آن بخواند ۱۵ آوریل ۲۰۲۳ است.

داده‌های تجمیعی تحت‌تأثیر اولویت‌های برنامه‌های انتخابی کاربر

کاربران نهایی می‌توانند برای برنامه‌های «خواب» و «فعالیت» که با Health Connect ادغام کرده‌اند اولویت تعیین کنند. فقط کاربران نهایی می‌توانند این فهرست‌های اولویت‌دار را تغییر دهند. وقتی خواندن تجمیعی انجام می‌دهید، «میانای برنامه‌سازی کاربردی تجمیعی» هرگونه داده تکراری را درنظر می‌گیرد و فقط داده‌های برنامه با بالاترین اولویت را نگه می‌دارد. اگر کاربر چند برنامه داشته باشد که نوع یکسانی از داده‌ها را (مثل تعداد قدم‌ها یا مسافت طی‌شده) در یک زمان می‌نویسند، ممکن است داده‌های تکراری وجود داشته باشد.

تصویری که «تغییر ترتیب اولویت برنامه‌ها» را نشان می‌دهد
شکل ۱: تغییر ترتیب اولویت‌های برنامه

شکل نشان‌دهنده تغییر ترتیب اولویت برنامه‌ها

برای کسب اطلاعات درباره اینکه کاربران نهایی چگونه می‌توانند برنامه‌هایشان را اولویت‌بندی کنند، به مدیریت داده‌های Health Connect مراجعه کنید.

کاربر می‌تواند برنامه‌ها را اضافه یا حذف کند و همچنین اولویت آن‌ها را تغییر دهد. کاربر ممکن است بخواهد برنامه‌ای را که داده‌های تکراری می‌نویسد بردارد تا مجموع داده‌ها در صفحه Health Connect با برنامه دارای بالاترین اولویت یکسان باشد. مجموع داده‌ها به‌صورت هم‌زمان به‌روزرسانی می‌شود.

اگرچه Aggregate API داده‌های برنامه‌های «فعالیت» و «خواب» را با حذف داده‌های تکراری براساس نحوه تنظیم اولویت‌های کاربر محاسبه می‌کند، شما همچنان می‌توانید منطق خودتان را برای محاسبه جداگانه داده‌های هر برنامه که این داده‌ها را می‌نویسد بسازید.

فقط انواع داده «فعالیت» و «خواب» توسط Health Connect تکرارزدایی می‌شوند و مجموع داده‌های نشان‌داده‌شده مقادیر پس‌از انجام تکرارزدایی توسط «میانای برنامه‌سازی کاربردی تجمیع» است. این مجموع‌ها جدیدترین روز کاملی را نشان می‌دهد که داده‌های مربوط به گام‌ها و مسافت در آن وجود دارد. برای انواع دیگر داده‌ها، نتایج تجمیعی همه داده‌های نوع موردنظر را در Health Connect از همه برنامه‌هایی که داده‌ها را نوشته‌اند ترکیب می‌کند.

خواندن در پس‌زمینه

می‌توانید درخواست کنید برنامه‌تان در پس‌زمینه اجرا شود و داده‌ها را از Health Connect بخواند. اگر اجازه خواندن پس‌زمینه‌ای را درخواست کنید، کاربرتان می‌تواند به برنامه شما اجازه دهد داده‌ها را در پس‌زمینه بخواند.

انواع داده‌های تجمیعی پشتیبانی‌شده براساس سوابق

این جدول همه انواع داده‌های تجمیعی پشتیبانی‌شده توسط Health Connect را براساس سابقه فهرست می‌کند.

جدول: انواع داده‌های تجمیعی پشتیبانی‌شده براساس سوابق
ضبط نوع داده تجمیعی
ActiveCaloriesBurnedRecord ACTIVE_CALORIES_TOTAL
ActivityIntensityRecord DURATION_TOTAL، INTENSITY_MINUTES_TOTAL، MODERATE_DURATION_TOTAL، VIGOROUS_DURATION_TOTAL
BasalMetabolicRateRecord BASAL_CALORIES_TOTAL
BloodPressureRecord DIASTOLIC_AVG، DIASTOLIC_MAX، DIASTOLIC_MIN، SYSTOLIC_AVG، SYSTOLIC_MAX، SYSTOLIC_MIN
CyclingPedalingCadenceRecord RPM_AVG، RPM_MAX، RPM_MIN
DistanceRecord DISTANCE_TOTAL
ElevationGainedRecord ELEVATION_GAINED_TOTAL
ExerciseSessionRecord EXERCISE_DURATION_TOTAL
FloorsClimbedRecord FLOORS_CLIMBED_TOTAL
HeartRateRecord BPM_AVG، BPM_MAX، BPM_MIN، MEASUREMENTS_COUNT
HeightRecord HEIGHT_AVG، HEIGHT_MAX، HEIGHT_MIN
HydrationRecord VOLUME_TOTAL
MindfulnessSessionRecord MINDFULNESS_DURATION_TOTAL
NutritionRecord BIOTIN_TOTAL, CAFFEINE_TOTAL, CALCIUM_TOTAL, CHLORIDE_TOTAL, CHOLESTEROL_TOTAL, CHROMIUM_TOTAL, COPPER_TOTAL, DIETARY_FIBER_TOTAL, ENERGY_FROM_FAT_TOTAL, ENERGY_TOTAL, FOLATE_TOTAL, FOLIC_ACID_TOTAL, IODINE_TOTAL, IRON_TOTAL, MAGNESIUM_TOTAL, MANGANESE_TOTAL, MOLYBDENUM_TOTAL, MONOUNSATURATED_FAT_TOTAL, NIACIN_TOTAL, PANTOTHENIC_ACID_TOTAL, PHOSPHORUS_TOTAL, POLYUNSATURATED_FAT_TOTAL, POTASSIUM_TOTAL, PROTEIN_TOTAL, RIBOFLAVIN_TOTAL, SATURATED_FAT_TOTAL, SELENIUM_TOTAL, SODIUM_TOTAL, SUGAR_TOTAL, THIAMIN_TOTAL, TOTAL_CARBOHYDRATE_TOTAL, TOTAL_FAT_TOTAL, TRANS_FAT_TOTAL, UNSATURATED_FAT_TOTAL, VITAMIN_A_TOTAL, VITAMIN_B12_TOTAL, VITAMIN_B6_TOTAL, VITAMIN_C_TOTAL, VITAMIN_D_TOTAL, VITAMIN_E_TOTAL, VITAMIN_K_TOTAL, ZINC_TOTAL
PowerRecord POWER_AVG، POWER_MAX، POWER_MIN
RestingHeartRateRecord BPM_AVG، BPM_MAX، BPM_MIN
SkinTemperatureRecord TEMPERATURE_DELTA_AVG، TEMPERATURE_DELTA_MAX، TEMPERATURE_DELTA_MIN
SleepSessionRecord SLEEP_DURATION_TOTAL
SpeedRecord SPEED_AVG، SPEED_MAX، SPEED_MIN
StepsRecord COUNT_TOTAL
StepsCadenceRecord RATE_AVG، RATE_MAX، RATE_MIN
TotalCaloriesBurnedRecord ENERGY_TOTAL
WeightRecord WEIGHT_AVG، WEIGHT_MAX، WEIGHT_MIN
WheelchairPushesRecord COUNT_TOTAL