Bu kılavuz, Health Connect 1.1.0-alpha12 veya sonraki sürümlerle uyumludur.
Health Connect, periferik vücut sıcaklığını ölçmek için deri sıcaklığı veri türünü sağlar. Bu ölçüm; uyku kalitesini, üreme sistemi sağlığını ve olası hastalık başlangıcını tespit etmek için özellikle yararlı bir sinyaldir.
Health Connect'in kullanılabilirlik durumunu kontrol etme
Uygulamanız, Health Connect'i kullanmaya çalışmadan önce Health Connect'in kullanıcının cihazında kullanılabilir olduğunu doğrulamalıdır. Health Connect, tüm cihazlara önceden yüklenmemiş veya devre dışı bırakılmış olabilir.
HealthConnectClient.getSdkStatus() yöntemini kullanarak kullanılabilirlik durumunu kontrol edebilirsiniz.
Health Connect'in kullanılabilirliğini kontrol etme
fun checkHealthConnectAvailability(context: Context) { val providerPackageName = "com.google.android.apps.healthdata" 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, kullanıcıyı gerekirse Google Play Store'dan Health Connect'i yüklemeye veya güncellemeye yönlendirebilirsiniz.
Özelliğin kullanılabilirliği
Bir kullanıcının cihazının Health Connect'te deri sıcaklığını destekleyip desteklemediğini belirlemek için istemcideFEATURE_SKIN_TEMPERATURE özelliğinin 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 deri sıcaklığı özelliğini eklemek için öncelikle SkinTemperature veri türü için izin isteyin.
Deri sıcaklığı verilerini yazabilmek için beyan etmeniz gereken izin:
<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
Uygulamanız, istemci örneği oluşturduktan sonra kullanıcıdan izin istemelidir. Kullanıcıların diledikleri zaman izin vermelerine veya izinleri reddetmelerine olanak tanınmalıdır. Bunun için gerekli veri türlerine yönelik bir izin grubu oluşturun. Öncelikle, kümedeki izinlerin Android manifest dosyanızda beyan edildiğinden emin olun.
val permissions = setOf( HealthPermission.getReadPermission(SkinTemperatureRecord::class), HealthPermission.getWritePermission(SkinTemperatureRecord::class) )
getGrantedPermissions yöntemini kullanın. Aksi takdirde bu izinleri istemek için createRequestPermissionResultContract yöntemini kullanın. Health Connect izinleri ekranı açılır.
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ında yer alan bilgiler
Deri sıcaklığı ölçümleri kayıtlar halinde düzenlenir. Her kayıt aşağıdaki bilgileri içerir:
- Santigrat veya fahrenhayt cinsinden referans 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 farkların listesi. Her biri, son ölçümden bu yana deri sıcaklığındaki değişimi gösterir. Referans sıcaklık sağlanırsa bu farklar aynı sıcaklık birimlerini kullanmalıdır.
- Ölçümün kullanıcının vücudunda yapıldığı konum: parmak, ayak parmağı veya bilek.
Desteklenen toplamalar
SkinTemperatureRecord için aşağıdaki toplu değerler 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 deri 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)
),
)
)
)
}