Tổng hợp dữ liệu trong Health Connect có thể bao gồm phương pháp tổng hợp cơ bản hoặc việc tổng hợp dữ liệu thành các nhóm. Quy trình làm việc dưới đây sẽ hướng dẫn bạn cách thực hiện cả hai.
Phương pháp tổng hợp cơ bản
Để sử dụng phương pháp tổng hợp cơ bản trên dữ liệu của bạn, hãy dùng hàm aggregate
trên đối tượng HealthConnectClient
. Phương pháp này chấp nhận đối tượng AggregateRequest
, trong đó bạn thêm các loại chỉ số và khoảng thời gian làm tham số. Cách gọi phương pháp tổng hợp cơ bản phụ thuộc vào loại chỉ số được sử dụng.
Phương pháp tổng hợp tích luỹ
Phương pháp tổng hợp tích luỹ sẽ tính tổng giá trị.
Ví dụ sau đây cho bạn thấy cách tổng hợp dữ liệu cho một loại dữ liệu:
suspend fun aggregateDistance(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
// The result may be null if no data is available in the time range
val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L
} catch (e: Exception) {
// Run error handling here
}
}
Phương pháp tổng hợp thống kê
Phương pháp tổng hợp thống kê tính toán các giá trị tối thiểu, tối đa hoặc trung bình của bản ghi có mẫu.
Ví dụ sau đây minh hoạ cách sử dụng phương pháp tổng hợp thống kê:
suspend fun aggregateHeartRate(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response =
healthConnectClient.aggregate(
AggregateRequest(
setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
// The result may be null if no data is available in the time range
val minimumHeartRate = response[HeartRateRecord.BPM_MIN]
val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
} catch (e: Exception) {
// Run error handling here
}
}
Nhóm
Health Connect cũng có thể cho phép bạn tổng hợp dữ liệu thành các nhóm. Bạn có thể dùng 2 loại nhóm là thời lượng và khoảng thời gian.
Sau khi được gọi, loại nhóm sẽ trả về một danh sách nhóm. Lưu ý rằng danh sách có thể thưa thớt, do đó, nhóm sẽ không được đưa vào danh sách nếu không chứa dữ liệu nào.
Thời lượng
Trong trường hợp này, dữ liệu tổng hợp được chia thành các nhóm trong một thời lượng cố định, chẳng hạn như một phút hoặc một giờ. Để tổng hợp dữ liệu thành các nhóm, hãy dùng aggregateGroupByDuration
. Phương pháp này chấp nhận đối tượng AggregateGroupByDurationRequest
, trong đó bạn thêm các loại chỉ số, khoảng thời gian và Duration
làm tham số.
Sau đây là ví dụ về những bước tổng hợp thành các nhóm có thời lượng một phút:
suspend fun aggregateStepsIntoMinutes(
healthConnectClient: HealthConnectClient,
startTime: LocalDateTime,
endTime: LocalDateTime
) {
try {
val response =
healthConnectClient.aggregateGroupByDuration(
AggregateGroupByDurationRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
timeRangeSlicer = Duration.ofMinutes(1L)
)
)
for (durationResult in response) {
// The result may be null if no data is available in the time range
val totalSteps = durationResult.result[StepsRecord.COUNT_TOTAL]
}
} catch (e: Exception) {
// Run error handling here
}
}
Khoảng thời gian
Trong trường hợp này, dữ liệu tổng hợp được chia thành các nhóm trong một khoảng thời gian dựa trên ngày, chẳng hạn như một tuần hoặc một tháng. Để tổng hợp dữ liệu thành các nhóm, hãy dùng aggregateGroupByPeriod
. Phương pháp này chấp nhận đối tượng AggregateGroupByPeriodRequest
, trong đó bạn thêm các loại chỉ số, khoảng thời gian và Period
làm tham số.
Sau đây là ví dụ về những bước tổng hợp thành các nhóm theo tháng:
suspend fun aggregateStepsIntoMonths(
healthConnectClient: HealthConnectClient,
startTime: LocalDateTime,
endTime: LocalDateTime
) {
try {
val response =
healthConnectClient.aggregateGroupByPeriod(
AggregateGroupByPeriodRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
timeRangeSlicer = Period.ofMonths(1)
)
)
for (monthlyResult in response) {
// The result may be null if no data is available in the time range
val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
}
} catch (e: Exception) {
// Run error handling here
}
}
Hạn chế về việc đọc
Theo mặc định, tất cả ứng dụng đều có thể đọc dữ liệu từ Health Connect trong vòng tối đa 30 ngày trước thời điểm cấp quyền lần đầu.
Nếu bạn cần mở rộng quyền đọc ngoài bất kỳ hạn chế mặc định nào, hãy yêu cầu PERMISSION_READ_HEALTH_DATA_HISTORY
.
Nếu không, nếu không có quyền này, thì việc cố gắng đọc các bản ghi cũ hơn 30 ngày sẽ dẫn đến lỗi.
Nhật ký quyền của một ứng dụng đã xoá
Nếu người dùng xoá ứng dụng của bạn, tất cả quyền, bao gồm cả quyền truy cập nhật ký, sẽ bị thu hồi. Nếu người dùng cài đặt lại ứng dụng của bạn và cấp lại quyền, thì các hạn chế mặc định tương tự sẽ áp dụng và ứng dụng của bạn có thể đọc dữ liệu của Health Connect trong vòng tối đa 30 ngày trước ngày mới đó.
Ví dụ: giả sử người dùng xoá ứng dụng của bạn vào ngày 10 tháng 5 năm 2023, sau đó cài đặt lại ứng dụng vào ngày 15 tháng 5 năm 2023 và cấp quyền đọc. Theo mặc định, ứng dụng của bạn hiện có thể đọc dữ liệu từ ngày 15 tháng 4 năm 2023.
Dữ liệu tổng hợp chịu ảnh hưởng của các mức độ ưu tiên ứng dụng do người dùng chọn
Người dùng cuối có thể đặt mức độ ưu tiên cho các ứng dụng Ngủ và Hoạt động mà họ đã tích hợp với Health Connect. Chỉ người dùng cuối mới có thể thay đổi các danh sách ưu tiên này. Khi bạn thực hiện một lượt đọc tổng hợp, Aggregate API sẽ tính đến mọi dữ liệu trùng lặp và chỉ giữ lại dữ liệu từ ứng dụng có mức độ ưu tiên cao nhất. Dữ liệu trùng lặp có thể tồn tại nếu người dùng có nhiều ứng dụng ghi cùng một loại dữ liệu (chẳng hạn như số bước đi hoặc quãng đường đã đi) cùng một lúc.
Để biết thông tin về cách người dùng cuối có thể ưu tiên các ứng dụng của họ, hãy xem phần Quản lý dữ liệu Health Connect.
Người dùng có thể thêm hoặc xoá ứng dụng cũng như thay đổi mức độ ưu tiên của ứng dụng. Người dùng có thể muốn xoá một ứng dụng đang ghi dữ liệu trùng lặp để tổng dữ liệu trên màn hình Health Connect giống với ứng dụng mà họ đã đặt mức độ ưu tiên cao nhất. Tổng số dữ liệu được cập nhật theo thời gian thực.
Mặc dù Aggregate API tính toán dữ liệu của ứng dụng Hoạt động và Ngủ bằng cách loại bỏ trùng lặp dữ liệu theo cách người dùng đặt mức độ ưu tiên, nhưng bạn vẫn có thể xây dựng logic riêng để tính toán riêng dữ liệu cho từng ứng dụng ghi dữ liệu đó.
Health Connect chỉ loại bỏ trùng lặp các loại dữ liệu về Hoạt động và Giấc ngủ, còn tổng dữ liệu hiển thị là các giá trị sau khi API Tổng hợp loại bỏ trùng lặp. Những tổng này cho biết ngày đầy đủ gần đây nhất có dữ liệu về số bước và quãng đường. Đối với các loại ứng dụng khác, tổng số tất cả các ứng dụng như vậy được kết hợp sẽ hiển thị trong tổng số dữ liệu trong Health Connect.
Đọc ở chế độ nền
Bạn có thể yêu cầu ứng dụng chạy ở chế độ nền và đọc dữ liệu từ Health Connect. Nếu bạn yêu cầu quyền Đọc ở chế độ nền, người dùng có thể cấp cho ứng dụng quyền đọc dữ liệu ở chế độ nền.
Các loại dữ liệu tổng hợp được hỗ trợ theo bản ghi
Bảng này liệt kê tất cả các loại dữ liệu tổng hợp được hỗ trợ theo bản ghi Health Connect.