Bu kılavuz, Health Connect'in 1.1.0-alpha12 sürümüyle uyumludur.
Health Connect, vücudun periferik sıcaklığını ölçmek için deri sıcaklığı veri türünü sunar. Bu ölçüm, uyku kalitesini, üreme sağlığını ve olası hastalık başlangıcını tespit etmek için özellikle faydalı bir sinyaldir.
Health Connect'in kullanılabilirliğini kontrol etme
Uygulamanız, Health Connect'i kullanmaya çalışmadan önce kullanıcının cihazında Health Connect'in kullanılabilir olduğunu doğrulamalıdır. Health Connect bazı cihazlara önceden yüklenmemiş veya devre dışı bırakılmış olabilir.
Kullanılabilirlik durumunu HealthConnectClient.getSdkStatus() yöntemini kullanarak kontrol edebilirsiniz.
Health Connect'in kullanılabilirliğini kontrol etme
fun checkHealthConnectAvailability(context: Context) { val providerPackageName = "com.google.android.apps.healthdata" // Or get from HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName) if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) { // Health Connect is not available. Guide the user to install/enable it. // For example, show a dialog. return // early return as there is no viable integration } if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) { // Health Connect is available but requires an update. // Optionally redirect to package installer to find a provider, for example: val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding" context.startActivity( Intent(Intent.ACTION_VIEW).apply { setPackage("com.android.vending") data = Uri.parse(uriString) putExtra("overlay", true) putExtra("callerId", context.packageName) } ) return } // Health Connect is available, obtain a HealthConnectClient instance val healthConnectClient = HealthConnectClient.getOrCreate(context) // Issue operations with healthConnectClient }
getSdkStatus() tarafından döndürülen duruma bağlı olarak, gerekirse kullanıcıyı Google Play Store'dan Health Connect'i yüklemeye veya güncellemeye yönlendirebilirsiniz.
Özelliğin kullanılabilirliği
Kullanıcının cihazının Health Connect'te deri sıcaklığını destekleyip desteklemediğini belirlemek için istemcideFEATURE_SKIN_TEMPERATURE simgesinin kullanılabilirliğini kontrol edin:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Gerekli izinler
Deri sıcaklığına erişim aşağıdaki izinlerle korunur:
android.permission.health.READ_SKIN_TEMPERATUREandroid.permission.health.WRITE_SKIN_TEMPERATURE
Uygulamanıza cilt sıcaklığı özelliği eklemek için SkinTemperature veri türüyle ilgili izinleri isteyerek başlayın.
Cilt sıcaklığını yazabilmek için beyan etmeniz gereken izin aşağıda verilmiştir:
<application>
<uses-permission
android:name="android.permission.health.WRITE_SKIN_TEMPERATURE" />
...
</application>
Deri sıcaklığını okumak için aşağıdaki izinleri istemeniz gerekir:
<application>
<uses-permission
android:name="android.permission.health.READ_SKIN_TEMPERATURE" />
...
</application>
Kullanıcıdan izin isteme
İstemci örneği oluşturduktan sonra uygulamanızın kullanıcıdan izin istemesi gerekir. Kullanıcılar, izinleri istedikleri zaman verebilmeli veya reddedebilmelidir. Bunu yapmak için gerekli veri türleri için bir dizi izin oluşturun. Gruptaki izinlerin önce Android manifestinizde tanımlandığından emin olun.
val permissions = setOf( HealthPermission.getReadPermission(SkinTemperatureRecord::class), HealthPermission.getWritePermission(SkinTemperatureRecord::class) )
getGrantedPermissions
kullanın. Sahip değilse bu izinleri istemek için
createRequestPermissionResultContract
kullanın. Bu işlem, Health Connect izinleri ekranını gösterir.
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.") } } }
Deri sıcaklığı kaydına dahil edilen bilgiler
Deri sıcaklığı ölçümleri kayıtlar halinde düzenlenir. Her kayıt aşağıdaki bilgileri içerir:
- Santigrat veya fahrenhayt cinsinden temel sıcaklık. Bu, uygulamanızın kullanıcı arayüzünde görselleştirme için en yararlı olan isteğe bağlı bir değerdir.
- Deri sıcaklığındaki delta listesi. Her biri, son ölçümden bu yana deri sıcaklığındaki değişimi gösterir. Temel sıcaklık sağlanırsa bu deltalar aynı sıcaklık birimlerini kullanmalıdır.
- Ölçümün yapıldığı kullanıcının vücudundaki konum: parmak, ayak parmağı veya bilek.
Desteklenen toplamalar
SkinTemperatureRecord için aşağıdaki toplama değerleri kullanılabilir:
Örnek kullanım
Aşağıdaki kod snippet'lerinde, deri sıcaklığı ölçümlerinin nasıl okunacağı ve yazılacağı gösterilmektedir.
Deri sıcaklığı kaydını okuma
Aşağıdaki kod snippet'inde, Jetpack kitaplığını kullanarak deri sıcaklığı ölçümlerinin nasıl okunacağı gösterilmektedir:
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.
}
}
Deri sıcaklığı kaydı yazma
Aşağıdaki kod snippet'inde, Jetpack kitaplığını kullanarak cilt sıcaklığı ölçümlerinin nasıl yazılacağı gösterilmektedir:
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)
),
)
)
)
}