تحديد القياسات الصحية باستخدام MeasurementClient

باستخدام واجهة برمجة التطبيقات MeasureClient، يسجّل تطبيقك عمليات معاودة الاتصال لتلقّي البيانات لفترة زمنية قصيرة. تستهدف هذه البيانات الحالات التي يكون فيها تطبيقك قيد الاستخدام وتتطلب تحديثات سريعة للبيانات. إذا كان ذلك ممكنًا، قم بإنشاء هذا مع واجهة المستخدم التي في المقدّمة حتى يكون المستخدم على علم بها.

إضافة التبعيات

لإضافة تبعية على "الخدمات الصحية"، يجب إضافة مستودع Google Maven إلى مشروعك. لمزيد من المعلومات، راجِع مستودع Maven من Google.

بعد ذلك، في ملف build.gradle على مستوى الوحدة، أضِف التبعية التالية:

رائع

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

Kotlin

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

التحقّق من الإمكانات

قبل التسجيل للحصول على تحديثات البيانات، تحقق من أن الجهاز يمكنه توفير نوع البيانات التي يحتاجها تطبيقك. فمن خلال التحقق من الإمكانات أولاً، يمكنك تفعيل ميزات معيّنة أو إيقافها أو تعديل واجهة المستخدم الخاصة بتطبيقك لتعويض الإمكانات غير المتوفّرة.

يوضّح المثال التالي كيفية التحقّق مما إذا كان بإمكان جهاز توفير نوع بيانات 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
}

التسجيل للحصول على البيانات

تكون كل معاودة اتصال تسجِّلها لنوع واحد من البيانات. تجدر الإشارة إلى أن بعض أنواع البيانات قد يكون لها حالات متفاوتة للتوافر. على سبيل المثال، قد لا تتوفر بيانات معدل نبض القلب عندما لا يتم ربط الجهاز بالمعصم بشكل صحيح.

من المهم تقليل مدة تسجيل معاودة الاتصال، لأنّ عمليات معاودة الاتصال تتسبب في زيادة معدلات أخذ العينات من أجهزة الاستشعار، ما يؤدي بدوره إلى زيادة استهلاك الطاقة.

يوضّح المثال التالي كيفية تسجيل طلب معاودة الاتصال وإلغاء تسجيله لتلقّي بيانات 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)
    }
}