Bu kılavuz, Health Connect'in 1.1.0-alpha12 sürümüyle 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 sağlığını ve hastalığın başlangıç olasılığı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ı cihazlarda önceden yüklenmemiş veya devre dışı bırakılmış olabilir.
HealthConnectClient.getSdkStatus()
yöntemini kullanarak kullanılabilirliği 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.
Özellik kullanılabilirliği
Kullanıcının cihazının Health Connect'te cilt 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_TEMPERATURE
android.permission.health.WRITE_SKIN_TEMPERATURE
Uygulamanıza deri sıcaklığı özelliği eklemek için SkinTemperature
veri türü için yazma izni 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ın izinleri istedikleri zaman vermesine veya reddetmesine izin verilmelidir.
Bunu yapmak için gerekli veri türleri için bir dizi izin oluşturun. Gruptaki izinlerin önce Android manifestinizde beyan edildiğinden emin olun.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(SkinTemperatureRecord::class),
HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)
Uygulamanıza gerekli izinlerin verilip verilmediğini görmek için getGrantedPermissions
aracını kullanın. Aksi takdirde, bu izinleri istemek için createRequestPermissionResultContract
simgesini kullanın. Bu işlem, Health Connect izinleri ekranını gösterir.
// 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)
}
}
Kullanıcılar izinleri istedikleri zaman verebilir veya iptal edebilir. Bu nedenle, uygulamanızın verilen izinleri düzenli olarak kontrol etmesi ve izinlerin kaybedildiği senaryoları ele alması gerekir.
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 Fahrenheit derece cinsinden bazal sıcaklık. Bu, uygulamanızın kullanıcı arayüzünde görselleştirme için en kullanışlı olan isteğe bağlı bir değerdir.
- Deri sıcaklığındaki delta listesi. Bu listede, son ölçümden bu yana deri sıcaklığındaki değişim gösterilir. Temel sıcaklık sağlanıyorsa bu farklar 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 toplu değerler kullanılabilir:
Örnek kullanım
Aşağıdaki kod snippet'lerinde, cilt sıcaklığı ölçümlerinin nasıl okunup yazılacağı gösterilmektedir.
Deri sıcaklığı kaydını oku
Aşağıdaki kod snippet'inde, Jetpack kitaplığı kullanılarak 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ığı kullanılarak 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)
),
)
)
)
}