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

تجمیع داده‌ها در 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 تا 30 روز قبل از اولین بار اعطای مجوز بخوانند.

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

مثال

اگر کاربر برای اولین بار در 30 مارس 2023 مجوز خواندن را به برنامه شما اعطا کرد، اولین اطلاعاتی که برنامه شما می تواند بازخوانی کند از 28 فوریه 2023 به بعد خواهد بود.

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