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

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

محدودیت 30 روزه

برنامه ها می توانند داده ها را از Health Connect تا 30 روز قبل از اولین بار اعطای مجوز بخوانند.

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

مثال 30 روزه

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

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

خواندن داده های قدیمی تر از 30 روز

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

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

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

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

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

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

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

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

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