使用 MeasureClient 测量运动时的健康状况

借助 MeasureClient API,您的应用可以注册回调,以便在短时间内接收数据。这很适合应用处于使用中并且需要快速更新数据的情况。您在创建时应尽可能使用前台界面,以便让用户知晓。

添加依赖项

如需添加健康服务的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解相关信息,请参阅 Google 的 Maven 制品库

然后在您的模块级 build.gradle 文件中,添加以下依赖项:

Groovy

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

Kotlin

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

检查功能

在注册数据更新之前,请检查设备是否可以提供您的应用所需的数据类型。通过先检查功能,您可以启用或停用某些功能,或者修改应用的界面以填补不可用的功能。

以下示例展示了如何检查设备是否可以提供 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)
    }
}