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

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

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

หากต้องการเพิ่มทรัพยากร Dependency ของ Health Services คุณต้องเพิ่มที่เก็บ 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")
}

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

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

ลงทะเบียนข้อมูล

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

คุณควรลดระยะเวลาที่มีการลงทะเบียน 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)
    }
}