دمای پوست را اندازه گیری کنید

این راهنما با Health Connect نسخه 1.1.0-alpha12 سازگار است.

Health Connect یک نوع داده دمای پوست را برای اندازه گیری دمای محیطی بدن ارائه می دهد. این اندازه‌گیری سیگنال مفیدی برای تشخیص کیفیت خواب، سلامت باروری و احتمال شروع بیماری است.

مجوزهای مورد نیاز

مانند هر نوع داده ای در Health Connect، دسترسی به دمای پوست با یک جفت مجوز محافظت می شود: READ_SKIN_TEMPERATURE و WRITE_SKIN_TEMPERATURE .

درخواست مجوز از کاربر

پس از ایجاد یک نمونه مشتری، برنامه شما باید از کاربر مجوز درخواست کند. کاربران باید در هر زمانی اجازه دهند یا رد کنند.

برای انجام این کار، مجموعه ای از مجوزها را برای انواع داده های مورد نیاز ایجاد کنید. مطمئن شوید که ابتدا مجوزهای مجموعه در مانیفست اندروید شما اعلام شده است.

// Create a set of permissions for required data types
val PERMISSIONS =
    setOf(
  HealthPermission.getReadPermission(SkinTemperatureRecord::class),
  HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)

از getGrantedPermissions استفاده کنید تا ببینید آیا برنامه شما قبلاً مجوزهای لازم را دارد یا خیر. اگر نه، از createRequestPermissionResultContract برای درخواست آن مجوزها استفاده کنید. این صفحه مجوزهای 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)
  }
}

از آنجایی که کاربران می‌توانند در هر زمانی مجوزها را اعطا یا لغو کنند، برنامه شما باید به‌طور دوره‌ای مجوزهای اعطا شده را بررسی کند و سناریوهایی را که در آن مجوز از دست می‌رود رسیدگی کند.

اطلاعات موجود در یک رکورد دمای پوست

اندازه گیری دمای پوست در سوابق سازماندهی می شود. هر رکورد شامل اطلاعات زیر است:

  • دمای پایه ، بر حسب درجه سانتیگراد یا درجه فارنهایت. این یک مقدار اختیاری است که برای تجسم در رابط کاربری برنامه شما بسیار مفید است.
  • فهرستی از دلتاها در دمای پوست که هر کدام تغییر دمای پوست را از آخرین اندازه‌گیری نشان می‌دهند. اگر دمای پایه ارائه شده باشد، این دلتاها باید از واحدهای دمایی یکسانی استفاده کنند.
  • مکان روی بدن کاربر که در آن اندازه‌گیری شده است: انگشت، پا، یا مچ دست.

تجمعات پشتیبانی شده

Health Connect به شما امکان می دهد مقادیر کلی زیر را برای یک لیست مشخص از دلتاها دریافت کنید:

  • حداقل ارزش
  • حداکثر مقدار
  • مقدار متوسط

دمای پوست را بخوانید

قطعه کد زیر نحوه خواندن اندازه گیری دمای پوست را با استفاده از کتابخانه 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.
    }
}

دمای پوست را بنویسید

قطعه کد زیر نحوه نوشتن اندازه گیری دمای پوست را با استفاده از کتابخانه 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)
                ),
            )
        )
    )
}