داده های جمع شده را بخوانید

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

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

مدت زمان

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

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

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

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

به عنوان مثال، فرض کنید کاربر برنامه شما را در 10 می 2023 حذف کرده و سپس در 15 مه 2023 برنامه را مجدداً نصب کرده و مجوز خواندن را اعطا می کند. اولین تاریخی که اکنون برنامه شما می تواند داده های آن را به طور پیش فرض بخواند ، 15 آوریل 2023 است.

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

کاربران نهایی می‌توانند اولویت را برای برنامه‌های Sleep و Activity که با Health Connect ادغام کرده‌اند تعیین کنند. فقط کاربران نهایی می توانند این لیست های اولویت را تغییر دهند. هنگامی که خواندن انبوه را انجام می‌دهید، API Aggregate برای داده‌های تکراری حساب می‌کند و فقط داده‌های برنامه را با بالاترین اولویت نگه می‌دارد. اگر کاربر چندین برنامه داشته باشد که نوع داده های مشابهی را می نویسند - مانند تعداد مراحل انجام شده یا مسافت طی شده - به طور همزمان ممکن است داده های تکراری وجود داشته باشد.

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

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

حتی اگر Aggregate API داده‌های برنامه‌های Activity و Sleep را با حذف داده‌ها بر اساس نحوه تعیین اولویت‌ها توسط کاربر محاسبه می‌کند، همچنان می‌توانید منطق خود را ایجاد کنید تا داده‌ها را جداگانه برای هر برنامه‌ای که آن داده را می‌نویسد محاسبه کنید.

فقط انواع داده‌های Activity و Sleep توسط Health Connect حذف می‌شوند و مجموع داده‌های نشان‌داده‌شده مقادیری هستند که پس از حذف توسط API Aggregate انجام شده است. این مجموع آخرین روز کامل را نشان می دهد که در آن داده ها برای قدم ها و مسافت وجود دارد. برای انواع دیگر برنامه‌ها، تعداد کل این برنامه‌ها در مجموع داده‌ها در Health Connect نشان داده می‌شود.

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

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

پشتیبانی از انواع داده های انبوه بر اساس رکورد

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

ضبط کنید نوع داده انبوه
ActiveCaloriesBurnedRecord ACTIVE_CALORIES_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 ، 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 ، 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
TotalCaloriesBurnedRecord ENERGY_TOTAL
WeightRecord WEIGHT_AVG ، WEIGHT_MAX ، WEIGHT_MIN
WheelchairPushesRecord COUNT_TOTAL