قياس درجة حرارة الجلد

يتوافق هذا الدليل مع الإصدار 1.1.0-alpha12 من Health Connect.

يوفّر Health Connect نوع بيانات درجة حرارة الجلد لقياس درجة حرارة الأطراف الجسم. يُعدّ هذا القياس إشارة مفيدة بشكل خاص لرصد جودة النوم والصحة الإنجابية وبداية المرض المحتمَلة.

الأذونات المطلوبة

كما هو الحال مع أي نوع من البيانات في Health Connect، يتم حماية الوصول إلى درجة حرارة الجلد بزوج من الأذونات: READ_SKIN_TEMPERATURE و WRITE_SKIN_TEMPERATURE.

طلب الأذونات من المستخدم

بعد إنشاء مثيل عميل، يجب أن يطلب تطبيقك الأذونات من العميل. يجب السماح للمستخدمين بمنح الأذونات أو رفضها في أي وقت.

لإجراء ذلك، أنشئ مجموعة من الأذونات لأنواع البيانات المطلوبة. تأكَّد من أنّ الأذونات في المجموعة مُدرَجة في بيان Android أولاً.

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