Với API MeasureClient
, ứng dụng sẽ đăng ký các lệnh gọi lại để nhận dữ liệu trong một khoảng thời gian ngắn.
API này dành cho những tình huống mà ứng dụng đang hoạt động và cần cập nhật dữ liệu nhanh chóng. Nếu có thể, hãy tạo một giao diện người dùng trên nền trước để người dùng nhận biết.
Thêm phần phụ thuộc
Để thêm một phần phụ thuộc trên Dịch vụ sức khoẻ, bạn phải thêm kho lưu trữ Google Maven vào dự án. Để biết thêm thông tin, hãy xem Kho lưu trữ Maven của Google.
Sau đó, trong tệp build.gradle
cấp mô-đun, hãy thêm phần phụ thuộc sau:
Groovy
dependencies { implementation "androidx.health:health-services-client:1.1.0-alpha03" }
Kotlin
dependencies { implementation("androidx.health:health-services-client:1.1.0-alpha03") }
Kiểm tra các chức năng
Trước khi đăng ký nhận thông tin cập nhật dữ liệu, hãy kiểm tra để đảm bảo rằng thiết bị có thể cung cấp kiểu dữ liệu mà ứng dụng của bạn cần. Khi kiểm tra các chức năng trước, bạn có thể bật/tắt một số tính năng hoặc sửa đổi giao diện người dùng của ứng dụng để bù cho những chức năng không có.
Ví dụ sau đây cho biết cách kiểm tra xem thiết bị có thể cung cấp kiểu dữ liệu HEART_RATE_BPM
hay không:
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
}
Đăng ký nhận dữ liệu
Mỗi lệnh gọi lại mà bạn đăng ký đều dành cho một loại dữ liệu. Cần lưu ý rằng một số loại dữ liệu có thể có các trạng thái khác nhau về phạm vi cung cấp. Ví dụ: dữ liệu nhịp tim có thể không có sẵn khi thiết bị không được gắn đúng cách vào cổ tay.
Quan trọng là phải giảm thiểu khoảng thời gian đăng ký lệnh gọi lại, vì lệnh gọi lại làm tăng tốc độ lấy mẫu của cảm biến, từ đó làm tăng mức tiêu thụ pin.
Ví dụ sau đây cho thấy cách đăng ký và huỷ đăng ký một lệnh gọi lại để nhận dữ liệu 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)
}
}