اندازه‌گیری‌های سلامتی نقطه‌ای با MeasureClient

با MeasureClient API، برنامه شما تماس‌های برگشتی را برای دریافت داده‌ها برای مدت کوتاهی ثبت می‌کند. این برای شرایطی است که برنامه‌تان درحال استفاده است و به به‌روزرسانی سریع داده‌ها نیاز دارد. درصورت امکان، این کار را با میانای کاربری پیش‌زمینه انجام دهید تا کاربر مطلع شود.

افزودن وابستگی‌ها

برای افزودن وابستگی به «خدمات بهداشتی»، باید مخزن Google Maven را به پروژه‌تان اضافه کنید. برای اطلاعات بیشتر، به مخزن Maven در Google مراجعه کنید.

سپس، در فایل build.gradle سطح ماژول، وابستگی زیر را اضافه کنید:

شیار

dependencies {
    implementation "androidx.health:health-services-client:1.1.0"
}

کاتلین

dependencies {
    implementation("androidx.health:health-services-client:1.1.0")
}

بررسی قابلیت‌ها

قبل‌از ثبت‌نام برای به‌روزرسانی‌های داده، بررسی کنید که دستگاه بتواند نوع داده موردنیاز برنامه‌تان را ارائه دهد. با بررسی قابلیت‌ها در ابتدا، می‌توانید برخی ویژگی‌ها را فعال یا غیرفعال کنید یا میانای کاربر برنامه‌تان را برای جبران قابلیت‌هایی که دردسترس نیستند اصلاح کنید.

مثال زیر نشان می‌دهد که چگونه می‌توان بررسی کرد که آیا دستگاه می‌تواند نوع داده HEART_RATE_BPM را ارائه دهد یا نه:

val healthClient = HealthServices.getClient(this /*context*/)
val measureClient = healthClient.measureClient
lifecycleScope.launch {
    val capabilities = measureClient.getCapabilitiesAsync().await()
    supportsHeartRate = DataType.HEART_RATE_BPM in capabilities.supportedDataTypesMeasure
}

ثبت‌نام برای داده‌ها

هر فراخوانی برگشتی که ثبت می‌کنید برای یک نوع داده است. توجه داشته باشید که برخی‌از انواع داده‌ها ممکن است وضعیت‌های دردسترس بودن متفاوتی داشته باشند. برای مثال، وقتی دستگاه به‌درستی به مچ دست بسته نشده باشد، ممکن است داده‌های ضربان قلب دردسترس نباشد.

مهم است که مدت زمان ثبت callback را به حداقل برسانید، زیرا callbackها باعث افزایش نرخ نمونه‌برداری حسگر می‌شوند که به نوبه خود مصرف برق را افزایش می‌دهد.

مثال زیر نشان می‌دهد که چگونه یک فراخوانی را برای دریافت داده‌های HEART_RATE_BPM ثبت و لغو ثبت کنید:

val heartRateCallback = object : MeasureCallback {
    override fun onAvailabilityChanged(dataType: DeltaDataType<*, *>, availability: Availability) {
        if (availability is DataTypeAvailability) {
            // Handle availability change.
        }
    }

    override fun onDataReceived(data: DataPointContainer) {
        // Inspect data points.
    }
}
val healthClient = HealthServices.getClient(this /*context*/)
val measureClient = healthClient.measureClient

// Register the callback.
measureClient.registerMeasureCallback(DataType.Companion.HEART_RATE_BPM, heartRateCallback)

// Unregister the callback.
awaitClose {
    runBlocking {
        measureClient.unregisterMeasureCallbackAsync(DataType.Companion.HEART_RATE_BPM, heartRateCallback)
    }
}