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

توفّر "خدمات الصحة" إمكانية استخدام ExerciseEvents، التي تُرسل إشعارًا إلى تطبيقك عند وقوع حدث أثناء ممارسة التمارين الرياضية وتوفّر البيانات الوصفية المرتبطة به.

إضافة عناصر تابعة

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

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

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

Groovy

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

Kotlin

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

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

كما هو الحال مع جميع التمارين وأنواع البيانات في "خدمات الصحة"، عليك التحقّق من الإمكانات عند بدء التشغيل. بالنسبة إلى 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!")
        }
      }
    }
  }
}