วัดสุขภาพแบบสปอตด้วย MeasureClient

API ของ MeasureClient จะช่วยให้แอปของคุณลงทะเบียนการเรียกกลับเพื่อรับข้อมูลในช่วงเวลาสั้นๆ ได้ ซึ่งมีไว้สำหรับสถานการณ์ที่แอปของคุณกำลังใช้งานและต้องมีการอัปเดตข้อมูลอย่างรวดเร็ว หากเป็นไปได้ ให้สร้างโดยใช้ UI ในเบื้องหน้าเพื่อให้ผู้ใช้ทราบ

เพิ่มทรัพยากร Dependency

หากต้องการเพิ่มการอ้างอิงในบริการด้านสุขภาพ คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ ดูข้อมูลเพิ่มเติมได้ที่ ที่เก็บ Maven ของ Google

จากนั้นเพิ่มทรัพยากร Dependency ต่อไปนี้ในไฟล์ 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")
}

ตรวจสอบความสามารถ

ก่อนลงทะเบียนเพื่อรับการอัปเดตข้อมูล ให้ตรวจสอบว่าอุปกรณ์สามารถให้ข้อมูลประเภท ที่แอปของคุณต้องการได้ การตรวจสอบความสามารถก่อนจะช่วยให้คุณเปิดหรือ ปิดใช้ฟีเจอร์บางอย่าง หรือแก้ไข UI ของแอปเพื่อชดเชยความสามารถ ที่ไม่มีได้

ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบว่าอุปกรณ์ระบุประเภทข้อมูล 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)
    }
}