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

המדריך הזה תואם לגרסה 1.1.0-alpha12 של Health Connect.

‫Health Connect מספקת סוג נתונים של טמפרטורת העור למדידת טמפרטורת הגוף ההיקפית. המדד הזה שימושי במיוחד לזיהוי איכות השינה, בריאות הרבייה והתחלה פוטנציאלית של מחלה.

זמינות התכונות

כדי לדעת אם המכשיר של המשתמש תומך במדידת טמפרטורת העור ב-Health Connect, בודקים את הזמינות של FEATURE_SKIN_TEMPERATURE בלקוח:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}

מידע נוסף זמין במאמר בדיקת זמינות התכונות.

הרשאות נדרשות

הגישה לנתונים של טמפרטורת העור מוגנת על ידי ההרשאות הבאות:

  • android.permission.health.READ_SKIN_TEMPERATURE
  • android.permission.health.WRITE_SKIN_TEMPERATURE

כדי להוסיף לאפליקציה את האפשרות למדוד את טמפרטורת העור, צריך קודם לבקש הרשאות כתיבה לסוג הנתונים SkinTemperature.

זו ההרשאה שצריך להצהיר עליה כדי לכתוב את טמפרטורת העור:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_SKIN_TEMPERATURE" />
...
</application>

כדי לקרוא את טמפרטורת העור, צריך לבקש את ההרשאות הבאות:

<application>
  <uses-permission
android:name="android.permission.health.READ_SKIN_TEMPERATURE" />
...
</application>

בקשת הרשאות מהמשתמש

אחרי שיוצרים מופע של לקוח, האפליקציה צריכה לבקש הרשאות מהמשתמש. צריך לאפשר למשתמשים להעניק או לדחות הרשאות בכל שלב.

כדי לעשות זאת, יוצרים קבוצת הרשאות לסוגי הנתונים הנדרשים. קודם צריך לוודא שההרשאות בסט מוצהרות במניפסט של 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)
  }
}

המשתמשים יכולים לתת או לבטל הרשאות בכל שלב, ולכן האפליקציה צריכה לבדוק מעת לעת אילו הרשאות ניתנו לה, ולטפל בתרחישים שבהם ההרשאה בוטלה.

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

מדידות של טמפרטורת העור מאורגנות ברשומות. כל רשומה מכילה את הפרטים הבאים:

  • טמפרטורת בסיס, במעלות צלזיוס או במעלות פרנהייט. זהו ערך אופציונלי שמועיל בעיקר להמחשה בממשק המשתמש של האפליקציה.
  • רשימה של שינויים בטמפרטורת העור, שכל אחד מהם מציג את השינוי בטמפרטורת העור מאז המדידה האחרונה. אם מספקים את טמפרטורת הבסיס, צריך להשתמש באותן יחידות טמפרטורה לחישוב ההפרשים.
  • המיקום בגוף המשתמש שבו בוצעה המדידה: אצבע, אצבע ברגל או פרק כף היד.

צבירות נתמכות

אין צבירות נתמכות לסוג הנתונים הזה.

דוגמה לשימוש

קריאה או כתיבה של מדידות טמפרטורת העור באמצעות ספריית JetPack.

קריאה של טמפרטורת העור

קטע הקוד הבא מראה איך לקרוא מדידות של טמפרטורת העור באמצעות ספריית 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)
                ),
            )
        )
    )
}