Nếu bạn muốn xây dựng một ứng dụng quản lý các chỉ số sức khoẻ của người dùng, bạn có thể sử dụng Health Connect để thực hiện những việc như:
- Đọc dữ liệu về chỉ số sức khoẻ như huyết áp, nhịp tim và thân nhiệt từ các ứng dụng khác
- Ghi dữ liệu về chỉ số sức khoẻ do ứng dụng của bạn hoặc các thiết bị được kết nối ghi lại
- Theo dõi xu hướng và cung cấp thông tin chi tiết về sức khoẻ dựa trên dữ liệu về chỉ số sức khoẻ
Hướng dẫn này mô tả cách làm việc với các loại dữ liệu về chỉ số sức khoẻ, bao gồm quyền, quy trình đọc và ghi, cũng như các phương pháp hay nhất.
Tổng quan: Xây dựng trình theo dõi toàn diện về chỉ số sức khoẻ
Bạn có thể xây dựng trải nghiệm theo dõi toàn diện về chỉ số sức khoẻ bằng Health Connect bằng cách làm theo các bước cốt lõi sau:
- Yêu cầu các quyền thích hợp đối với các loại dữ liệu về chỉ số sức khoẻ.
- Ghi dữ liệu về chỉ số sức khoẻ bằng các bản ghi như
BloodPressureRecord,HeartRateRecordvà các bản ghi khác về chỉ số sức khoẻ. - Đọc dữ liệu về chỉ số sức khoẻ để hiển thị, phân tích hoặc đồng bộ hoá.
- Sử dụng tính năng xử lý theo lô để ghi và đọc dữ liệu một cách hiệu quả.
Quy trình này cho phép khả năng tương tác với các ứng dụng Health Connect khác và xác minh quyền truy cập dữ liệu do người dùng kiểm soát.
Trước khi bắt đầu
Trước khi triển khai các tính năng về chỉ số sức khoẻ:
- Tích hợp Health Connect bằng phần phụ thuộc thích hợp.
- Tạo một thực thể
HealthConnectClient. - Xác minh rằng ứng dụng của bạn triển khai các quy trình cấp quyền khi bắt đầu chạy dựa trên Quyền sức khoẻ.
Khái niệm chính
Dữ liệu về chỉ số sức khoẻ trong Health Connect được biểu thị bằng nhiều loại bản ghi, mỗi loại tương ứng với một chỉ số sinh lý cụ thể. Không giống như các phiên tập thể dục, các chỉ số sức khoẻ thường được ghi lại dưới dạng dữ liệu tại một thời điểm hoặc dữ liệu dựa trên khoảng thời gian.
Các loại dữ liệu về chỉ số sức khoẻ
Dữ liệu về chỉ số sức khoẻ được biểu thị bằng các loại bản ghi riêng lẻ. Các loại phổ biến bao gồm:
BloodPressureRecord: Biểu thị một chỉ số huyết áp duy nhất, bao gồm huyết áp tâm thu và tâm trương, cũng như tư thế cơ thể.HeartRateRecord: Biểu thị một loạt các chỉ số nhịp tim.RestingHeartRateRecord: Biểu thị một chỉ số nhịp tim lúc nghỉ ngơi duy nhất.BodyTemperatureRecord: Biểu thị một chỉ số thân nhiệt duy nhất, bao gồm cả vị trí đo.BloodGlucoseRecord: Biểu thị một chỉ số đường huyết duy nhất, bao gồm cả mối quan hệ với bữa ăn và nguồn mẫu.OxygenSaturationRecord: Biểu thị một chỉ số độ bão hoà oxy trong máu duy nhất.RespiratoryRateRecord: Biểu thị một chỉ số nhịp thở duy nhất.
Để xem danh sách đầy đủ các loại dữ liệu, hãy xem bài viết Các loại dữ liệu của Health Connect.
Điều cần cân nhắc khi phát triển ứng dụng
Dữ liệu về chỉ số sức khoẻ có thể nhạy cảm và các ứng dụng có thể cần ghi dữ liệu để phản hồi các chỉ số từ cảm biến hoặc hoạt động đầu vào của người dùng, hoặc đồng bộ hoá dữ liệu từ một phần phụ trợ. Quyền là yếu tố quan trọng để xử lý dữ liệu về chỉ số sức khoẻ.
Quyền
Ứng dụng của bạn phải yêu cầu các quyền thích hợp của Health Connect trước khi đọc hoặc ghi dữ liệu về chỉ số sức khoẻ. Các quyền phổ biến đối với chỉ số sức khoẻ bao gồm huyết áp, tần số tim, thân nhiệt, đường huyết, độ bão hòa oxy và nhịp thở. Điều này bao gồm những quyền sau:
- Huyết áp: Quyền đọc và ghi cho
BloodPressureRecord. - Nhịp tim: Quyền đọc và ghi cho
HeartRateRecord. - Nhịp tim lúc nghỉ ngơi: Quyền đọc và ghi cho
RestingHeartRateRecord. - Thân nhiệt: Quyền đọc và ghi cho
BodyTemperatureRecord. - Đường huyết: Quyền đọc và ghi cho
BloodGlucoseRecord. - Độ bão hoà oxy: Quyền đọc và ghi cho
OxygenSaturationRecord. - Nhịp thở: Quyền đọc và ghi cho
RespiratoryRateRecord.
Sau đây là ví dụ về cách yêu cầu quyền đối với huyết áp, nhịp tim và thân nhiệt:
Sau khi tạo một phiên bản ứng dụng, ứng dụng của bạn cần yêu cầu người dùng cấp quyền. Người dùng phải được phép cấp hoặc từ chối cấp quyền bất cứ lúc nào. Để thực hiện việc này, hãy tạo một tập hợp quyền cho các kiểu dữ liệu bắt buộc. Trước tiên, bạn cần khai báo các quyền trong tập hợp này ở tệp kê khai Android.
val permissions = setOf( HealthPermission.getReadPermission(BloodPressureRecord::class), HealthPermission.getWritePermission(BloodPressureRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class), HealthPermission.getReadPermission(BodyTemperatureRecord::class), HealthPermission.getWritePermission(BodyTemperatureRecord::class) )
getGrantedPermissions
để xem ứng dụng của bạn đã được cấp các quyền cần thiết chưa. Nếu chưa, hãy sử dụng
createRequestPermissionResultContract
để yêu cầu các quyền đó. Thao tác này sẽ hiện màn hình các quyền của Health Connect.
val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getWritePermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class) ) val requestPermissionsLauncher = rememberLauncherForActivityResult( contract = PermissionController.createRequestPermissionResultContract() ) { grantedPermissions -> if (grantedPermissions.containsAll(permissions)) { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions granted!") } } else { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions denied.") } } }
Để yêu cầu quyền, hãy gọi hàm checkPermissionsAndRun:
if (!granted.containsAll(permissions)) { // Check if required permissions are not granted, and return return emptySet() } // Permissions already granted; proceed with inserting or reading data
Nếu bạn chỉ cần yêu cầu quyền đối với một loại dữ liệu duy nhất, chẳng hạn như huyết áp, hãy chỉ đưa loại dữ liệu đó vào tập hợp quyền của bạn:
Quyền truy cập vào huyết áp được bảo vệ bởi các quyền sau:
android.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
Để thêm khả năng đo huyết áp vào ứng dụng của bạn, hãy bắt đầu bằng cách yêu cầu quyền đối với loại dữ liệu BloodPressureRecord.
Dưới đây là quyền bạn cần khai báo để có thể ghi dữ liệu về huyết áp:
<application>
<uses-permission
android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />
...
</application>
Để đọc dữ liệu về huyết áp, bạn cần yêu cầu các quyền sau:
<application>
<uses-permission
android:name="android.permission.health.READ_BLOOD_PRESSURE" />
...
</application>
Ghi dữ liệu về chỉ số sức khoẻ
Phần này mô tả cách ghi dữ liệu về chỉ số sức khoẻ vào Health Connect. Dữ liệu về chỉ số sức khoẻ thường được ghi dưới dạng các bản ghi riêng lẻ. Nếu bạn đang ghi nhiều bản ghi cùng một lúc, chẳng hạn như đồng bộ hoá từ cảm biến hoặc phần phụ trợ, hãy sử dụng tính năng xử lý theo lô.
Ví dụ về cách ghi BloodPressureRecord:
suspend fun writeBloodPressureRecord(healthConnectClient: HealthConnectClient) { val record = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) healthConnectClient.insertRecords(listOf(record)) }
Ghi theo lô
Nếu ứng dụng của bạn cần ghi nhiều điểm dữ liệu, chẳng hạn như đồng bộ hoá dữ liệu từ một thiết bị thông minh hoặc một dịch vụ phụ trợ, thì bạn nên ghi theo lô để cải thiện hiệu quả và giảm mức tiêu thụ pin. Health Connect có thể xử lý tối đa 1.000 bản ghi trong một yêu cầu ghi.
Đoạn mã sau đây cho thấy cách ghi nhiều bản ghi cùng một lúc theo lô:
suspend fun writeBatchRecords(healthConnectClient: HealthConnectClient) { val bloodPressureRecord = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) val heartRateRecord = HeartRateRecord( startTime = Instant.now().minusSeconds(60), startZoneOffset = ZoneOffset.UTC, endTime = Instant.now(), endZoneOffset = ZoneOffset.UTC, samples = listOf(HeartRateRecord.Sample(time = Instant.now().minusSeconds(30), beatsPerMinute = 80)) ) healthConnectClient.insertRecords(listOf(bloodPressureRecord, heartRateRecord)) }
Đọc dữ liệu về chỉ số sức khoẻ
Các ứng dụng có thể đọc dữ liệu về chỉ số sức khoẻ để hiển thị các chỉ số, phân tích xu hướng hoặc đồng bộ hoá dữ liệu với một máy chủ bên ngoài. Để đọc các chỉ số sức khoẻ, hãy sử dụng ReadRecordsRequest với loại bản ghi cụ thể và lọc theo một phạm vi thời gian.
Ví dụ về cách đọc BloodPressureRecord dữ liệu:
suspend fun readBloodPressureRecords( healthConnectClient: HealthConnectClient, startTime: Instant, endTime: Instant ) { val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = BloodPressureRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) for (record in response.records) { // Process each blood pressure record val systolic = record.systolic val diastolic = record.diastolic } }
Nếu bạn cần đồng bộ hoá dữ liệu về chỉ số sức khoẻ với một máy chủ phụ trợ hoặc cập nhật kho dữ liệu của ứng dụng với Health Connect, hãy sử dụng ChangeLogs. Điều này cho phép bạn truy xuất danh sách các bản ghi được chèn, cập nhật hoặc xoá kể từ một thời điểm cụ thể, hiệu quả hơn so với việc theo dõi các thay đổi theo cách thủ công hoặc đọc tất cả dữ liệu nhiều lần. Để biết thêm thông tin, hãy xem bài viết Đồng bộ hoá dữ liệu với Health Connect.
Các phương pháp hay nhất
Hãy làm theo các nguyên tắc sau để cải thiện độ tin cậy của dữ liệu và trải nghiệm người dùng:
- Yêu cầu ghi theo lô: Để giảm chi phí đầu vào/đầu ra và tiết kiệm pin, hãy nhóm các điểm dữ liệu vào một lệnh gọi
insertRecordsduy nhất với các lô tối đa 1.000 bản ghi, thay vì ghi từng điểm riêng lẻ. - Ghi thường xuyên trong quá trình theo dõi trực tiếp: Đối với các bản cập nhật thường xuyên từ cảm biến (chẳng hạn như thiết bị theo dõi đường huyết liên tục hoặc thiết bị theo dõi nhịp tim), hãy ghi dữ liệu theo lô trong khoảng thời gian tối đa 15 phút để cân bằng giữa các bản cập nhật theo thời gian thực với hiệu suất pin.
- Sử dụng WorkManager để đồng bộ hoá ở chế độ nền: Sử dụng
WorkManagercho các hoạt động ghi bị trì hoãn, chẳng hạn như đồng bộ hoá dữ liệu từ một thiết bị đồng hành hoặc dịch vụ phụ trợ. Hãy đặt mục tiêu là khoảng thời gian 15 phút cho các hoạt động ghi theo lô. - Tránh ghi dữ liệu trùng lặp: Sử dụng Mã ứng dụng: Khi tạo bản ghi, hãy đặt
metadata.clientRecordId. Health Connect sử dụng mã này để xác định các bản ghi duy nhất. Nếu bạn cố gắng ghi một bản ghi cóclientRecordIdđã tồn tại, Health Connect sẽ bỏ qua bản sao hoặc cập nhật bản ghi hiện có thay vì tạo một bản ghi mới. Việc đặtmetadata.clientRecordIdlà cách hiệu quả nhất để ngăn chặn các bản sao trong quá trình thử lại đồng bộ hoá hoặc cài đặt lại ứng dụng.val record = StepsRecord( count = 100, startTime = startTime, endTime = endTime, startZoneOffset = ZoneOffset.UTC, endZoneOffset = ZoneOffset.UTC, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "daily_steps_2023_10_27_user_123" ) )
- Kiểm tra dữ liệu hiện có: Trước khi đồng bộ hoá dữ liệu, hãy truy vấn Health Connect để tìm các bản ghi trong phạm vi thời gian đồng bộ hoá nhằm xem dữ liệu từ ứng dụng của bạn đã tồn tại hay chưa, để tránh các bản sao hoặc ghi đè dữ liệu mới hơn.
- Nêu rõ lý do cấp quyền: Sử dụng quy trình
Permission.createIntentđể giải thích lý do ứng dụng của bạn cần quyền truy cập vào dữ liệu sức khoẻ, ví dụ: "Để theo dõi xu hướng huyết áp và cung cấp thông tin chi tiết". - Điều chỉnh dấu thời gian cho phù hợp với các chỉ số: Xác minh rằng dấu thời gian của bản ghi phản ánh chính xác thời điểm đo. Đối với dữ liệu theo khoảng thời gian như
HeartRateRecord, hãy xác minh rằngstartTimevàendTimelà chính xác.
Thử nghiệm
Để xác minh tính chính xác của dữ liệu và trải nghiệm người dùng chất lượng cao, hãy làm theo các chiến lược thử nghiệm sau và tham khảo tài liệu chính thức về Các trường hợp sử dụng hàng đầu khi thử nghiệm.
Công cụ xác minh
- Health Connect Toolbox:Sử dụng ứng dụng đồng hành này để kiểm tra bản ghi theo cách thủ công, xoá dữ liệu thử nghiệm và mô phỏng các thay đổi đối với cơ sở dữ liệu. Đây là cách tốt nhất để xác minh rằng các bản ghi của bạn đang được lưu trữ đúng cách.
- Kiểm thử đơn vị bằng
FakeHealthConnectClient: Sử dụng thư viện thử nghiệm để xác minh cách ứng dụng của bạn xử lý các trường hợp đặc biệt, chẳng hạn như thu hồi quyền hoặc ngoại lệ API mà không cần thiết bị thực.
Danh sách kiểm tra chất lượng
Kiến trúc điển hình
Việc triển khai các chỉ số sức khoẻ thường bao gồm:
| Thành phần | Quản lý |
|---|---|
| Bộ điều khiển chỉ số sức khoẻ | Đọc dữ liệu đầu vào/cảm biến Logic xử lý theo lô |
| Lớp kho lưu trữ (gói các thao tác của Health Connect:) | Chèn bản ghi về chỉ số sức khoẻ Đọc bản ghi về chỉ số sức khoẻ |
| Lớp giao diện người dùng (Hiển thị): | Chỉ số trực tiếp Dữ liệu trong quá khứ Biểu đồ và xu hướng |
Khắc phục sự cố
| Dấu hiệu | Nguyên nhân có thể gây ra lỗi | Độ phân giải |
|---|---|---|
| Thiếu các loại dữ liệu (Ví dụ: Huyết áp) | Thiếu quyền ghi hoặc bộ lọc thời gian không chính xác. | Kiểm tra để đảm bảo rằng bạn đã yêu cầu và người dùng đã cấp quyền đối với loại dữ liệu cụ thể. Xác minh rằng ReadRecordsRequest sử dụng TimeRangeFilter bao gồm thời gian đo. Xem phần Quyền. |
| Bản ghi trùng lặp xuất hiện | Thiếu clientRecordId. |
Chỉ định một clientRecordId duy nhất trong Metadata của mỗi bản ghi. Điều này cho phép Health Connect thực hiện việc loại bỏ trùng lặp nếu cùng một dữ liệu được ghi hai lần trong quá trình thử lại đồng bộ hoá. Xem phần Các phương pháp hay nhất. |
| Không ghi được bản ghi | Đơn vị hoặc giá trị không chính xác nằm ngoài phạm vi hợp lệ. | Health Connect xác thực các giá trị bản ghi. Ví dụ: giá trị huyết áp phải nằm trong phạm vi hợp lý về mặt sinh lý. Kiểm tra tài liệu về loại dữ liệu để biết các phạm vi và đơn vị hợp lệ. |
Các bước gỡ lỗi phổ biến
| Kiểm tra trạng thái quyền. | Luôn gọi getPermissionStatus() trước khi thử thực hiện thao tác đọc hoặc ghi. Người dùng có thể thu hồi quyền trong phần cài đặt hệ thống bất cứ lúc nào. |