ביצוע מדידות של תקינות ספוט באמצעות MeasureClient

עם MeasureClient API, האפליקציה רושמת קריאות חוזרות (callback) כדי לקבל נתונים לפרק זמן קצר. האפשרות הזו מיועדת למצבים שבהם האפליקציה נמצאת בשימוש ונדרשים לה נתונים במהירות אם אפשר, כדאי ליצור קטע כזה עם ממשק משתמש שפועל בחזית כדי שהמשתמש מתוך מודעות.

הוספת יחסי תלות

כדי להוסיף תלות בשירותי Health, צריך להוסיף את מאגר Google Maven לפרויקט שלך. מידע נוסף זמין במאמר הבא: מאגר Maven של Google.

לאחר מכן, בקובץ build.gradle ברמת המודול, מוסיפים את התלות הבאה:

Groovy

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

Kotlin

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

בדיקת היכולות

לפני הרישום לעדכוני נתונים, חשוב לוודא שהמכשיר יכול לספק את סוג של הנתונים שהאפליקציה צריכה. קודם כל בדיקת היכולות מאפשרת להפעיל להשבית תכונות מסוימות או לשנות את ממשק המשתמש של האפליקציה כדי לפצות על היכולות שאינם זמינים.

הדוגמה הבאה מראה איך לבדוק אם מכשיר יכול לספק את סוג הנתונים 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)
    }
}