Panduan ini kompatibel dengan Health Connect versi 1.1.0-alpha12.
Health Connect menyediakan jenis data suhu kulit untuk mengukur suhu tubuh perifer. Pengukuran ini adalah sinyal yang sangat berguna untuk mendeteksi kualitas tidur, kesehatan reproduksi, dan potensi timbulnya penyakit.
Izin yang diperlukan
Seperti jenis data lainnya di Health Connect, akses ke suhu kulit dilindungi
oleh sepasang izin: READ_SKIN_TEMPERATURE
dan
WRITE_SKIN_TEMPERATURE
.
Meminta izin dari pengguna
Setelah membuat instance klien, aplikasi Anda perlu meminta izin dari pengguna. Pengguna harus diizinkan untuk memberikan atau menolak izin setiap saat.
Untuk melakukannya, buat kumpulan izin untuk jenis data yang diperlukan. Pastikan izin dalam kumpulan dideklarasikan dalam manifes Android Anda terlebih dahulu.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(SkinTemperatureRecord::class),
HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)
Gunakan getGrantedPermissions
untuk mengetahui apakah aplikasi Anda sudah
mendapatkan izin yang diperlukan. Jika belum, gunakan
createRequestPermissionResultContract
untuk meminta
izin tersebut. Tindakan ini akan menampilkan layar izin 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)
}
}
Karena pengguna dapat memberikan atau mencabut izin kapan saja, aplikasi Anda harus memeriksa izin yang diberikan secara berkala dan menangani skenario saat izin tersebut hilang.
Informasi yang disertakan dalam data suhu kulit
Pengukuran suhu kulit diatur ke dalam data. Setiap data terdiri dari informasi berikut:
- Suhu dasar, dalam derajat Celsius atau derajat Fahrenheit. Ini adalah nilai opsional yang paling berguna untuk visualisasi di UI aplikasi Anda.
- Daftar delta dalam suhu kulit, yang masing-masing menunjukkan perubahan suhu kulit sejak pengukuran terakhir. Jika suhu dasar disediakan, delta ini harus menggunakan unit suhu yang sama.
- Lokasi di tubuh pengguna tempat pengukuran dilakukan: jari, jari kaki, atau pergelangan tangan.
Agregasi yang didukung
Health Connect memungkinkan Anda mendapatkan nilai gabungan berikut untuk daftar delta tertentu:
- Nilai minimum
- Nilai maksimum
- Nilai rata-rata
Membaca suhu kulit
Cuplikan kode berikut menunjukkan cara membaca pengukuran suhu kulit menggunakan library 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.
}
}
Menulis suhu kulit
Cuplikan kode berikut menunjukkan cara menulis pengukuran suhu kulit menggunakan library 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)
),
)
)
)
}