מדידה של טמפרטורת העור

המדריך הזה תואם לגרסה 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)
                ),
            )
        )
    )
}