التعامل مع أحداث التمارين

توفّر "الخدمات الصحية" الدعم لـ ExerciseEvents، التي تُعلِم تطبيقك عند وقوع حدث أثناء ممارسة التمارين الرياضية وتقدِّم البيانات الوصفية ذات الصلة.

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

يتطلب استخدام أحداث التمارين توفُّر أحدث إصدار من "حزمة تطوير البرامج (SDK) للخدمات الصحية".

لإضافة تبعية على "الخدمات الصحية"، يجب إضافة مستودع 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")
}

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

كما هو الحال مع جميع التمارين وأنواع البيانات في "الخدمات الصحية"، تحقَّق من الإمكانات عند بدء التشغيل. بالنسبة إلى ExerciseEvents على وجه الخصوص، بالإضافة إلى طلب ExerciseCapabilities، يمكنك استخدام ExerciseTypeCapabilities.supportedExerciseEvents للتحقق من أحداث التمارين المتوافقة مع التمرين المحدّد. بعد التأكّد من توفّر السمة ExerciseEvent المحدّدة، عليك أيضًا الاستعلام عن إمكانيات حدث التمرين الرياضي باستخدام getExerciseEventCapabilityDetails.

يعرض المثال التالي كيفية طلب البحث للتأكّد من توافق GOLF_SHOT_EVENT، ثم التأكّد من أنّ GOLF_SHOT_EVENT يتيح تصنيف نوع الأرجوحة.

fun handleCapabilities(capabilities: ExerciseCapabilities) {
  val golfCapabilities = capabilities.typeToCapabilities[ExerciseType.GOLF]
  val golfShotEventSupported =
    golfCapabilities
      ?.supportedExerciseEvents
      ?.contains(ExerciseEventType.GOLF_SHOT_EVENT)
  val golfSwingTypeClassificationSupported =
    golfCapabilities
      ?.getExerciseEventCapabilityDetails(ExerciseEventType.GOLF_SHOT_EVENT)
      ?.isSwingTypeClassificationSupported ?: false
}

طلب أحداث التمارين الرياضية في تمرين رياضي

لبدء التمرين وطلب الحصول على حدث للتمرين كجزء من التمرين، عليك الإعلان عن ExerciseConfig للتمرين وإضافة حقل للتمرين exerciseEventType.

يطلب المثال التالي استخدام GOLF_SHOT_EVENT كجزء من تمرين GOLF:

val config = ExerciseConfig(
  exerciseType = ExerciseType.GOLF,
  dataTypes = setOf(....),
  // ...
  exerciseEventTypes = setOf(ExerciseEventType.GOLF_SHOT_EVENT),
)

التسجيل لتلقّي آخر المعلومات حول فعاليات التمارين الرياضية

يمكنك تلقّي تحديثات ExerciseEvent كجزء من البنية الأساسية الحالية لتطبيقك لتلقّي تحديثات التمارين. يوضّح المثال التالي كيفية دمج الدعم لتحديثات GolfShotEvent:

val callback = object : ExerciseUpdateCallback {
  override fun onExerciseUpdateReceived(update: ExerciseUpdate) {
      ...
  }
  // [ExerciseEvent] intended to come through with low latency and out of
  // band of onExerciseUpdateReceived()
  override fun onExerciseEventReceived(event: ExerciseEvent) {
    when (event) {
      is GolfShotEvent -> {
        if (it.swingType == GolfShotSwingType.PUTT) {
          println("Putt detected!")
        }
      }
    }
  }
}