باستخدام واجهة برمجة التطبيقات
MeasureClient
،
يسجّل تطبيقك عمليات ردّ الاتصال لتلقّي البيانات لفترة قصيرة من الوقت.
هذا النوع من الأذونات مخصّص للحالات التي يكون فيها تطبيقك قيد الاستخدام ويتطلّب تحديثات سريعة للبيانات. إذا أمكن، أنشئ هذا الإجراء باستخدام واجهة مستخدم في المقدّمة لكي يكون المستخدم على دراية به.
إضافة عناصر تابعة
لإضافة اعتمادية على "خدمات الصحة"، يجب تضمين مستودع Google Maven في مشروعك. لمزيد من المعلومات، راجِع مستودع Maven من Google.
بعد ذلك، أضِف التبعية التالية في ملف build.gradle
على مستوى الوحدة:
رائع
dependencies { implementation "androidx.health:health-services-client:1.1.0-alpha05" }
Kotlin
dependencies { implementation("androidx.health:health-services-client:1.1.0-alpha05") }
التحقّق من الإمكانات
قبل التسجيل لتلقّي إشعارات بتعديلات البيانات، تأكَّد من أنّ الجهاز يمكنه توفير نوع البيانات التي يحتاجها تطبيقك. من خلال التحقّق من الإمكانات أولاً، يمكنك تفعيل ميزات معيّنة أو إيقافها أو تعديل واجهة مستخدم تطبيقك للتعويض عن الإمكانات غير المتاحة.
يوضّح المثال التالي كيفية التحقّق مما إذا كان الجهاز يمكنه توفير نوع البيانات 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)
}
}