Hướng dẫn này tương thích với Health Connect phiên bản 1.1.0-alpha12.
Health Connect cung cấp loại dữ liệu nhiệt độ trên da để đo nhiệt độ ngoại vi của cơ thể. Phép đo này là một tín hiệu đặc biệt hữu ích để phát hiện chất lượng giấc ngủ, sức khoẻ sinh sản và khả năng khởi phát bệnh tật.
Các quyền bắt buộc
Giống như mọi loại dữ liệu trong Health Connect, quyền truy cập vào nhiệt độ da được bảo vệ bằng một cặp quyền: READ_SKIN_TEMPERATURE
và WRITE_SKIN_TEMPERATURE
.
Yêu cầu người dùng cấp quyền
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.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(SkinTemperatureRecord::class),
HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)
Hãy sử dụng 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.
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
Vì người dùng có thể cấp hoặc thu hồi quyền bất cứ lúc nào, nên ứng dụng của bạn cần kiểm tra định kỳ các quyền đã cấp và xử lý các tình huống khi mất quyền.
Thông tin có trong bản ghi nhiệt độ trên da
Các phép đo nhiệt độ trên da được sắp xếp thành bản ghi. Mỗi bản ghi bao gồm các thông tin sau:
- Nhiệt độ cơ sở, tính bằng độ C hoặc độ F. Đây là giá trị không bắt buộc, hữu ích nhất cho việc trực quan hoá trong giao diện người dùng của ứng dụng.
- Danh sách các delta về nhiệt độ trên da, mỗi delta cho biết mức thay đổi về nhiệt độ trên da kể từ lần đo gần nhất. Nếu bạn cung cấp nhiệt độ cơ sở, thì các delta này phải sử dụng cùng một đơn vị nhiệt độ.
- Vị trí trên cơ thể người dùng nơi đo lường: ngón tay, ngón chân hoặc cổ tay.
Phương pháp tổng hợp được hỗ trợ
Health Connect cho phép bạn nhận các giá trị tổng hợp sau đây cho một danh sách delta nhất định:
- Giá trị tối thiểu
- Giá trị tối đa
- Giá trị trung bình
Đọc dữ liệu về nhiệt độ trên da
Đoạn mã sau đây cho biết cách đọc kết quả đo nhiệt độ da bằng thư viện Jetpack:
suspend fun readSkinTemperatures() {
// Error handling, permission check, and feature availability check
// aren't included.
// Record includes measurements during the past hour.
val recordEndTime = Instant.now()
val recordStartTime = recordEndTime.minusSeconds(60 * 60)
val response = healthConnectClient.readRecords(
ReadRecordsRequest<SkinTemperatureRecord>(
timeRangeFilter = TimeRangeFilter.between(
recordStartTime, recordEndTime
)
)
)
for (skinTemperatureRecord in response.records) {
// Process each skin temperature record here.
}
}
Ghi dữ liệu về nhiệt độ trên da
Đoạn mã sau đây cho biết cách ghi kết quả đo nhiệt độ da bằng thư viện Jetpack:
suspend fun writeSkinTemperatures(): InsertRecordsResponse {
// Error handling, permission check, and feature availability check
// aren't included.
// Record includes measurements during the past hour.
val recordEndTime: ZonedDateTime = now()
val recordStartTime: ZonedDateTime = recordEndTime.minusHours(1)
healthConnectClient.insertRecords(
// For this example, there's only one skin temperature record.
listOf(
SkinTemperatureRecord(
baseline = Temperature.celsius(37.0),
startTime = recordStartTime.toInstant(),
startZoneOffset = recordStartTime.offset,
endTime = recordEndTime.toInstant(),
endZoneOffset = recordEndTime.offset,
deltas = listOf(
SkinTemperatureRecord.Delta(
recordEndTime.minusMinutes(50).toInstant(), celsius(0.5)
), SkinTemperatureRecord.Delta(
recordEndTime.minusMinutes(30).toInstant(), celsius(-0.7)
)
),
measurementLocation = SkinTemperatureRecord.MEASUREMENT_LOCATION_FINGER,
metadata = Metadata.autoRecorded(
device = Device(type = Device.TYPE_RING)
),
)
)
)
}