Deri sıcaklığını ölçün

Bu kılavuz, Health Connect 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, özellikle uyku kalitesini, üreme sağlığını ve olası hastalık başlangıcını tespit etmek için faydalı bir sinyaldir.

Gerekli izinler

Health Connect'teki tüm veri türlerinde olduğu gibi, cilt sıcaklığına erişim de READ_SKIN_TEMPERATURE ve WRITE_SKIN_TEMPERATURE adlı iki izinle korunur.

Kullanıcıdan izin isteme

Uygulamanızın, istemci örneği oluşturduktan sonra kullanıcıdan izin istemesi gerekir. Kullanıcıların diledikleri zaman izin vermesine veya reddetmesine izin verilmelidir.

Bunun için gerekli veri türleri için bir dizi izin oluşturun. Öncelikle, gruptaki izinlerin Android manifest dosyanızda 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'u kullanın. Aksi takdirde bu izinleri istemek için createRequestPermissionResultContract değerini kullanın. Health Connect izinleri ekranı gösterilir.

// 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 verip iptal edebileceğinden, uygulamanızın izinleri düzenli olarak kontrol etmesi ve iznin kaybedildiği senaryoları ele alması gerekir.

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 derece 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 değerlerinin listesi. Her bir değer, son ölçümden bu yana deri sıcaklığındaki değişimi gösterir. Referans 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 toplama işlemleri

Health Connect, belirli bir delta listesi için aşağıdaki toplam değerleri almanızı sağlar:

  • Minimum değer
  • Maksimum değer
  • Ortalama değer

Deri sıcaklığı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ığını yaz

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)
                ),
            )
        )
    )
}