يتناول هذا الدليل عملية كتابة البيانات أو تعديلها في Health Connect.
إعداد بنية البيانات
قبل كتابة البيانات، نحتاج إلى إعداد السجلات أولاً. لأكثر من 50 بيانات الأنواع، ولكل منها الهياكل الخاصة بها. يمكنك الاطّلاع على مرجع Jetpack للحصول على مزيد من التفاصيل حول البيانات. الأنواع المتوفرة.
السجلّات الأساسية
يلتقط نوع بيانات الخطوات في Health Connect عدد الخطوات التي اتخذها المستخدم بين القراءات. يمثّل عدد الخطوات قياسًا شائعًا عبر منصات الصحة واللياقة البدنية والعافية.
يوضّح المثال التالي كيفية ضبط بيانات عدد الخطوات:
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
سجلات بوحدات قياس
يمكن لتطبيق Health Connect تخزين القيم مع وحدات القياس لتوفير ودقتها. أحد الأمثلة على ذلك هو نوع بيانات التغذية الذي يكون واسعًا وشاملة. وتشمل مجموعة واسعة من الحقول الغذائية الاختيارية التي تتراوح بين من إجمالي الكربوهيدرات إلى الفيتامينات. تمثل كل نقطة بيانات العناصر الغذائية التي من المحتمل أن يتم استهلاكها كجزء من وجبة أو عنصر غذائي.
في هذا النوع من البيانات، يتم تمثيل جميع العناصر الغذائية بوحدات
Mass
، بينما يتم تمثيل energy
في وحدة Energy
.
يوضح المثال التالي كيفية تعيين بيانات التغذية لمستخدم لديه أكل موزة:
val banana = NutritionRecord(
name = "banana",
energy = 105.0.kilocalories,
dietaryFiber = 3.1.grams,
potassium = 0.422.grams,
totalCarbohydrate = 27.0.grams,
totalFat = 0.4.grams,
saturatedFat = 0.1.grams,
sodium = 0.001.grams,
sugar = 14.0.grams,
vitaminB6 = 0.0005.grams,
vitaminC = 0.0103.grams,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
سجلات تضم بيانات السلسلة
يمكن لتطبيق Health Connect تخزين قائمة ببيانات سلسلة البيانات. ومن الأمثلة على ذلك نوع بيانات معدّل نبضات القلب الذي يسجِّل سلسلة من عينات نبضات القلب التي تم اكتشافها بين القراءات.
في هذا النوع من البيانات، يتم تمثيل المعلمة samples
بقائمة من
نماذج لمعدّل نبضات القلب: يحتوي كل نموذج على beatsPerMinute
.
قيمة وtime
.
يوضّح المثال التالي كيفية ضبط بيانات سلسلة معدّل نبضات القلب:
val heartRateRecord = HeartRateRecord(
startTime = START_TIME,
startZoneOffset = START_ZONE_OFFSET,
endTime = END_TIME,
endZoneOffset = END_ZONE_OFFSET,
// records 10 arbitrary data, to replace with actual data
samples = List(10) { index ->
HeartRateRecord.Sample(
time = START_TIME + Duration.ofSeconds(index.toLong()),
beatsPerMinute = 100 + index.toLong(),
)
}
)
كتابة البيانات
إحدى عمليات سير العمل الشائعة في Health Connect هي كتابة البيانات. لإضافة سجلّات
استخدام insertRecords
يوضح المثال التالي كيفية كتابة بيانات إدراج أعداد الخطوات:
suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
try {
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
healthConnectClient.insertRecords(listOf(stepsRecord))
} catch (e: Exception) {
// Run error handling here
}
}
تحديث البيانات
إذا كنت بحاجة إلى تغيير سجل واحد أو أكثر، خاصةً عندما تحتاج إلى مزامنة مخزن بيانات تطبيقك مع البيانات من Health Connect، ويمكنك تحديث بشكل أفضل. هناك طريقتان لتحديث البيانات الموجودة والتي تعتمد على المستخدم للعثور على السجلات.
البيانات الوصفية
يستحق الأمر فحص الفئة Metadata
أولاً لأنها ضرورية عندما
وتحديث البيانات. عند الإنشاء، يكون لكل Record
في Health Connect
metadata
. السمات التالية ذات صلة بـ
المزامنة:
الخصائص | الوصف |
---|---|
id
|
لكل Record في Health Connect قيمة id فريدة.
يملأ تطبيق Health Connect هذه البيانات تلقائيًا عند إدراج سجلّ جديد |
lastModifiedTime
|
كل Record يتتبع أيضًا آخر مرة
تم تعديل السجل.يملأ تطبيق Health Connect هذه البيانات تلقائيًا. |
clientRecordId
|
يمكن أن يكون لكل Record رقم تعريف فريد مرتبط به
ليكون بمثابة مرجع في مخزن بيانات التطبيق.
يوفّر تطبيقك هذه القيمة. |
clientRecordVersion
|
عندما يحتوي السجل على clientRecordId ، تكون
يمكن استخدام clientRecordVersion للسماح بالبيانات
المزامنة مع الإصدار المتوفّر في تطبيقك
مخزن البيانات.يوفّر تطبيقك هذه القيمة. |
التعديل من خلال رقم تعريف السجلّ
لتحديث البيانات، قم بإعداد السجلات المطلوبة أولاً. أجرِ أي تغييرات على
السجلات إذا لزم الأمر. بعد ذلك، يمكنك الاتصال بالرقم updateRecords
لإجراء
التغييرات.
يوضّح المثال التالي كيفية تعديل البيانات. لهذا الغرض، يجب تخصيص كل سجل تم تعديل قيم إزاحة المنطقة الخاصة بها إلى توقيت المحيط الهادئ.
suspend fun updateSteps(
healthConnectClient: HealthConnectClient,
prevRecordStartTime: Instant,
prevRecordEndTime: Instant
) {
try {
val request = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(
prevRecordStartTime,
prevRecordEndTime
)
)
)
val newStepsRecords = arrayListOf<StepsRecord>()
for (record in request.records) {
// Adjusted both offset values to reflect changes
val sr = StepsRecord(
count = record.count,
startTime = record.startTime,
startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
endTime = record.endTime,
endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
metadata = record.metadata
)
newStepsRecords.add(sr)
}
client.updateRecords(newStepsRecords)
} catch (e: Exception) {
// Run error handling here
}
}
الترقية من خلال معرِّف سجلّ العميل
إذا كنت تستخدم القيمتين الاختياريتين لمعرّف سجل العميل وإصدار سجل العميل،
نقترح استخدام insertRecords
بدلاً من updateRecords
.
بإمكان الدالة insertRecords
إثبات صحة البيانات.
إذا كانت البيانات متوفّرة في Health Connect استنادًا إلى مجموعة محدَّدة من
معرِّفات سجلات العملاء، يتم استبدالها. وإلا، تتم كتابتها كبيانات جديدة.
يكون هذا السيناريو مفيدًا كلما احتجت إلى مزامنة البيانات من
مخزن بيانات تطبيقك في Health Connect
يوضح المثال التالي كيفية إجراء عملية بحث أعلى على البيانات التي تم سحبها من مخزن بيانات التطبيق:
suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
val appStepsRecords = arrayListOf<StepsRecord>()
// Pull data from app datastore
// ...
// Make changes to data if necessary
// ...
// Store data in appStepsRecords
// ...
var sr = StepsRecord(
// Assign parameters for this record
metadata = Metadata(
clientRecordId = cid
)
)
appStepsRecords.add(sr)
// ...
return appStepsRecords
}
suspend fun upsertSteps(
healthConnectClient: HealthConnectClient,
newStepsRecords: ArrayList<StepsRecord>
) {
try {
healthConnectClient.insertRecords(newStepsRecords)
} catch (e: Exception) {
// Run error handling here
}
}
بعد ذلك، يمكنك استدعاء هذه الدوال في سلسلة المحادثات الرئيسية الخاصة بك.
upsertSteps(healthConnectClient, pullStepsFromDatastore())
التحقّق من القيمة في إصدار سجلّ العميل
إذا كانت عملية ترقية البيانات تتضمّن إصدار سجلّ العميل أو Health
ينفِّذ الربط عمليات تحقّق للمقارنة في clientRecordVersion
.
القيم. إذا كانت النسخة من البيانات المدرجة أعلى من
من البيانات الموجودة، فسيحدث الرجوع. خلاف ذلك، فإن العملية
تتجاهل التغيير وتظل القيمة كما هي.
لتضمين الإصدارات في بياناتك، تحتاج إلى توفير
Metadata.clientRecordVersion
بقيمة Long
استنادًا إلى عمليات تحديد الإصدارات
المنطق.
val sr = StepsRecord(
count = count,
startTime = startTime,
startZoneOffset = startZoneOffset,
endTime = endTime,
endZoneOffset = endZoneOffset,
metadata = Metadata(
clientRecordId = cid,
clientRecordVersion = version
)
)
لا تعمل عمليات التحسين على زيادة version
تلقائيًا عند حدوث تغييرات.
مما يمنع أي مثيلات غير متوقعة لاستبدال البيانات. بذلك، عليك
وتزويده يدويًا بقيمة أعلى.
أفضل الممارسات لكتابة البيانات
يجب أن تكتب التطبيقات البيانات الخاصة بالمصدر في Health Connect فقط.
إذا تم استيراد البيانات في تطبيقك من تطبيق آخر، ستتحمّل مسؤولية التطبيقات الأخرى لكتابة بياناته في Health Connect.
من الجيد أيضًا تنفيذ المنطق الذي يعالج استثناءات الكتابة مثل أن تكون بيانات خارج الحدود أو خطأ داخلي في النظام. يمكنك تطبيق استراتيجيات التراجع وإعادة المحاولة على آلية جدولة الوظيفة. إذا كنت تريد الكتابة إلى تعذّر تطبيق Health Connect في النهاية. تأكَّد من إمكانية تجاوز تطبيقك نقطة التصدير هذه. لا تنسَ تسجيل الأخطاء والإبلاغ عنها للمساعدة في التشخيص.
عند تتبع البيانات، هناك بعض الاقتراحات التي يمكنك اعتمادًا على طريقة كتابة التطبيق للبيانات.
التتبُّع السلبي
ويشمل ذلك التطبيقات التي تمارس تتبع اللياقة البدنية أو الصحة بشكل سلبي، مثل يتم تسجيل الخطوات أو معدّل نبضات القلب بشكل مستمر في الخلفية.
يحتاج تطبيقك إلى كتابة البيانات بشكل دوري في Health Connect ضمن الطرق التالية:
- في كل مزامنة، اكتب فقط البيانات الجديدة والبيانات المحدثة التي تم تعديلها منذ آخر مزامنة.
- تقسيم الطلبات إلى 1000 سجلّ كحدّ أقصى لكل طلب كتابة
- يمكنك استخدام
WorkManager
لجدولة المهام الدورية في الخلفية، مع فترة زمنية لا تقل عن 15 دقيقة. تقييد المهام لتنفيذها فقط عندما يكون الجهاز غير نشِط لفترة قصيرة ولا يعمل على النفاد البطارية.
val constraints = Constraints.Builder() .requiresBatteryNotLow() .requiresDeviceIdle(true) .build() val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>( 15, TimeUnit.MINUTES, 5, TimeUnit.MINUTES ) .setConstraints(constraints) .build()
التتبُّع النشط
ويشمل ذلك التطبيقات التي تنفّذ التتبُّع استنادًا إلى الأحداث، مثل التمارين والنوم أو إدخال المستخدم يدويًا مثل عنصر التغذية. يتم إنشاء هذه السجلات عندما يجرّب التطبيق يظهر في المقدّمة أو في أحداث نادرة حيث يتم استخدامه بضع مرات في اليوم
تأكَّد من أنّ تطبيقك لا يستمر في تشغيل Health Connect طوال مدة الاستخدام. مدة الحدث.
يجب كتابة البيانات في Health Connect بإحدى الطريقتين التاليتين:
- يمكنك مزامنة البيانات مع Health Connect بعد اكتمال الحدث. على سبيل المثال، مزامنة البيانات عندما ينهي المستخدم جلسة التمرين المتتبعة.
- تحديد موعد مهمة لمرة واحدة باستخدام
WorkManager
لمزامنة البيانات لاحقًا.
أفضل الممارسات لمزيد من الدقة وتكرار عمليات الكتابة
عند كتابة البيانات في Health Connect، استخدِم درجة الدقة المناسبة. استخدام تساعد الدقة المناسبة في تقليل حِمل التخزين، مع الحفاظ على بيانات متسقة ودقيقة. تشمل درجة دقة البيانات أمرين:
- معدل تكرار عمليات الكتابة: عدد المرات التي يرسل فيها تطبيقك أي بيانات جديدة إلى Health Connect. على سبيل المثال، اكتب بيانات جديدة كل 15 دقيقة.
- دقة البيانات المكتوبة: عدد المرات التي تم فيها دفع البيانات أخذ عينة. على سبيل المثال، اكتب عينات لمعدل ضربات القلب كل 5 ثوانٍ. ليس كل أنواع البيانات نفس معدل العينة. تعديل عدد الخطوات بفائدة بسيطة البيانات كل ثانية، على عكس وتيرة أقل تكرارًا مثل كل 60 ثوانٍ. ومع ذلك، قد تمنح معدلات العينات الأعلى للمستخدمين معلومات دقيقة في بيانات الصحة واللياقة البدنية الخاصة بهم. تكرارات معدلات العينات يجب أن يحقق توازنًا بين التفاصيل والأداء.
كتابة البيانات التي تتم مراقبتها على مدار اليوم
بالنسبة إلى البيانات التي يتم جمعها بشكلٍ مستمرّ، مثل الخطوات، يجب أن يستوفي طلبك إرسال رسالة إلى Health Connect كل 15 دقيقة على الأقل خلال اليوم.
نوع البيانات |
الوحدة |
المتوقعة |
مثال |
الخطوات |
الخطوات |
كل دقيقة واحدة |
من 23:14 إلى 23:15 - 5 خطوات من 23:16 إلى 23:17 - 22 خطوة من 23:17 إلى 23:18 - 8 خطوات |
وتيرة الخطوات |
خطوة/دقيقة |
كل دقيقة واحدة |
23:14 - 23:15 - 5 مساءً من 23:16 إلى 23:17 - 22 دقيقة في الدقيقة من 23:17 إلى 23:18 - 8 مساءً |
عدد دفعات الكرسي المتحرك |
يدفع |
كل دقيقة واحدة |
23:14 - 23:15 - 5 دفعات 23:16 - 23:17 - 22 دفعة 23:17 - 23:18 - 8 دفعات |
العدد النشط من CaloriesBurned |
السُعرات الحرارية |
كل 15 دقيقة |
من 23:15 إلى 23:30 - وحدتان حراريتان من 23:30 إلى 23:45 - 25 سعرًا حراريًا من 23:45 إلى 00:00 - 5 سعرات حرارية |
إجمالي السعرات الحرارية المحروقة |
السُعرات الحرارية |
كل 15 دقيقة |
من 23:15 إلى 23:30 - 16 سعرًا حراريًا من 23:30 إلى 23:45 - 16 سعرًا حراريًا من 23:45 إلى 00:00 - 16 سعرًا حراريًا |
المسافة |
كم/دقيقة |
كل دقيقة واحدة |
23:14-23:15 - 0.008 كم 23:16 - 23:16 - 0.021 كم 23:17 - 23:18 - 0.012 كم |
الارتفاع المكتسب |
د |
كل دقيقة واحدة |
من 20:36 إلى 20:37 - 3.048 دقيقة من 20:39 إلى 20:40 - 3.048 دقيقة من 23:23 إلى 23:24 - 9.144 دقيقة |
عدد الطوابق التي تم صعودها |
طوابق |
كل دقيقة واحدة |
من 23:14 إلى 23:15 - 5 طوابق من 23:16 إلى 23:16 - 22 طابقًا من 23:17 إلى 23:18 - 8 طوابق |
معدل ضربات القلب |
نبضة في الدقيقة |
كل دقيقة واحدة |
6:11 صباحًا - 55 نبضة في الدقيقة |
معدل ضربات القلب Rmssd |
ميللي ثانية |
كل دقيقة واحدة |
6:11 صباحًا - 23 ملي ثانية |
معدّل التنفس |
نفَس/دقيقة |
كل دقيقة واحدة |
23:14 - 23:15 - 60 نفَسًا/دقيقة 23:16 - 23:16 - 62 نفَسًا/دقيقة 23:17 - 23:18 - 64 نفَسًا/دقيقة |
تشبّع الأكسجين في الدم |
% |
كل ساعة واحدة |
6:11 - 95.208% |
كتابة الجلسات
يجب كتابة البيانات في Health Connect في نهاية التمرين أو النوم. جلسة المراجعة.
كأفضل ممارسة، يجب كتابة أي جلسة نوم أو جلسة تمرين مع
جهاز التسجيل وبيانات التعريف المناسبة، بما في ذلك
RecordingMethod
على الأقل، يجب أن يتّبع تطبيقك الإرشادات الواردة في قسم "المتوقَّع". العمود أدناه. أين اتبع "أفضل" التوجيه.
البيانات التي تم تتبعها أثناء التمرين
نوع البيانات |
الوحدة |
المتوقعة |
مع أطيب التحيات |
مثال |
الخطوات |
الخطوات |
كل دقيقة واحدة |
كل ثانية واحدة |
من 23:14 إلى 23:15 - 5 خطوات من 23:16 إلى 23:17 - 22 خطوة من 23:17 إلى 23:18 - 8 خطوات |
وتيرة الخطوات |
خطوة/دقيقة |
كل دقيقة واحدة |
كل ثانية واحدة |
من 23:14 إلى 23:15 - 35 دقيقة في الدقيقة من 23:16 إلى 23:17 - 37 دقيقة في الدقيقة 23:17 - 23:18 - 40 دقيقة في الدقيقة |
عدد دفعات الكرسي المتحرك |
يدفع |
كل دقيقة واحدة |
كل ثانية واحدة |
23:14-23:15 - 5 دفعات 23:16 - 23:17 - 22 دفعة 23:17 - 23:18 - 8 دفعات |
سلسلة نقاط التواصل في ركوب الدرّاجة |
نَفَس/دقيقة |
كل دقيقة واحدة |
كل ثانية واحدة |
23:14-23:15 - 65 دورة في الدقيقة 23:16 - 23:17 - 70 دورة في الدقيقة 23:17 - 23:18 - 68 دورة في الدقيقة |
الطاقة |
واط |
كل دقيقة واحدة |
كل ثانية واحدة |
23:14-23:15 - 250 واط 23:16 - 23:17 - 255 واط 23:17 - 23:18 - 245 واط |
السرعة |
كم/دقيقة |
كل دقيقة واحدة |
كل ثانية واحدة |
23:14-23:15 - 0.3 كم/دقيقة 23:16 - 23:17 - 0.4 كم/دقيقة 23:17 - 23:18 -0.4 كم/دقيقة |
المسافة |
كم/م |
كل دقيقة واحدة |
كل ثانية واحدة |
23:14-23:15 - 0.008 كم 23:16 - 23:16 - 0.021 كم 23:17 - 23:18 - 0.012 كم |
العدد النشط من CaloriesBurned |
السُعرات الحرارية |
كل دقيقة واحدة |
كل ثانية واحدة |
من 23:14 إلى 23:15 - 20 سعرًا حراريًا من 23:16 إلى 23:17 - 20 سعرًا حراريًا من 23:17 إلى 23:18 - 25 سعرًا حراريًا |
إجمالي السعرات الحرارية المحروقة |
السُعرات الحرارية |
كل دقيقة واحدة |
كل ثانية واحدة |
من 23:14 إلى 23:15 - 36 سعرًا حراريًا من 23:16 إلى 23:17 - 36 سعرًا حراريًا من 23:17 إلى 23:18 - 41 سعرًا حراريًا |
الارتفاع المكتسب |
د |
كل دقيقة واحدة |
كل ثانية واحدة |
من 20:36 إلى 20:37 - 3.048 دقيقة من 20:39 إلى 20:40 - 3.048 دقيقة من 23:23 إلى 23:24 - 9.144 دقيقة |
مسارات التمارين الرياضية |
خطوط الطول والعرض/النص البديل |
كل 3 إلى 5 ثوانٍ |
كل ثانية واحدة |
|
معدل ضربات القلب |
نبضة في الدقيقة |
كل دقيقة واحدة |
كل ثانية واحدة |
23:14-23:15 - 150 نبضة في الدقيقة 23:16 - 23:17 -152 نبضة في الدقيقة 23:17 - 23:18 - 155 نبضة في الدقيقة |
البيانات التي يتم تتبُّعها أثناء النوم
نوع البيانات |
الوحدة |
العيّنات المتوقَّعة |
مثال |
مراحل النوم |
المرحلة |
الفترة الزمنية الدقيقة لكل مرحلة نوم |
23:46 - 23:50 - مستيقظ من 23:50 إلى 23:56 - نوم خفيف 23:56 - 00:16 - نوم عميق |
معدّل نبضات القلب أثناء الراحة |
نبضة في الدقيقة |
قيمة يومية واحدة (أول شيء متوقع في الصباح) |
6:11 صباحًا - 60 نبضة في الدقيقة |
تشبّع الأكسجين في الدم |
% |
قيمة يومية واحدة (أول شيء متوقع في الصباح) |
6:11 - 95.208% |