يتوافق هذا الدليل مع الإصدار 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)
),
)
)
)
}