این راهنما فرآیند نوشتن یا بهروزرسانی دادهها در Health Connect را پوشش میدهد.
تنظیم ساختار داده
قبل از نوشتن داده، ابتدا باید رکوردها را تنظیم کنیم. برای بیش از 50 نوع داده، هر کدام ساختار مربوط به خود را دارند. برای جزئیات بیشتر در مورد انواع داده های موجود به مرجع Jetpack مراجعه کنید.
سوابق پایه
نوع داده Steps در Health Connect تعداد مراحلی را که کاربر بین خواندن انجام داده است را نشان می دهد. شمارش گام ها نشان دهنده یک اندازه گیری مشترک در پلتفرم های سلامت، تناسب اندام و سلامتی است.
مثال زیر نحوه تنظیم داده های شمارش مراحل را نشان می دهد:
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
با واحدهای اندازه گیری ثبت می کند
Health Connect میتواند مقادیر را همراه با واحدهای اندازهگیری آنها برای ارائه دقت ذخیره کند. یک مثال، نوع داده های Nutrition است که گسترده و جامع است. این شامل طیف گسترده ای از زمینه های غذایی اختیاری است که از کل کربوهیدرات ها گرفته تا ویتامین ها را شامل می شود. هر نقطه داده نشان دهنده مواد مغذی است که به طور بالقوه به عنوان بخشی از یک وعده غذایی یا ماده غذایی مصرف شده است.
در این نوع داده، همه مواد مغذی در واحد 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 می توان استفاده کرد تا به داده ها اجازه دهد با نسخه موجود در فروشگاه داده برنامه شما همگام شوند.برنامه شما این مقدار را تامین می کند. |
از طریق Record ID به روز رسانی کنید
برای به روز رسانی داده ها، ابتدا رکوردهای مورد نیاز را آماده کنید. در صورت لزوم هر گونه تغییر در سوابق انجام دهید. سپس برای ایجاد تغییرات با updateRecords
تماس بگیرید.
مثال زیر نحوه به روز رسانی داده ها را نشان می دهد. برای این منظور، هر رکورد دارای مقادیر افست ناحیه خود در PST است.
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
}
}
از طریق شناسه سابقه مشتری آپلود کنید
اگر از مقادیر اختیاری Client Record ID و Client Record Version استفاده می کنید، توصیه می کنیم از insertRecords
به جای updateRecords
استفاده کنید.
تابع insertRecords
قابلیت اضافه کردن داده ها را دارد. اگر دادهها در Health Connect بر اساس مجموعه شناسههای سوابق مشتری وجود داشته باشد، بازنویسی میشود. در غیر این صورت به عنوان داده جدید نوشته می شود. این سناریو زمانی مفید است که نیاز به همگام سازی داده ها از فروشگاه داده برنامه خود با Health Connect داشته باشید.
مثال زیر نشان میدهد که چگونه میتوان یک upsert را روی دادههای استخراجشده از فروشگاه داده برنامه انجام داد:
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 Connect بررسی های مقایسه را در مقادیر clientRecordVersion
انجام می دهد. اگر نسخه از داده های درج شده بالاتر از نسخه داده های موجود باشد، upsert اتفاق می افتد. در غیر این صورت، فرآیند تغییر را نادیده می گیرد و مقدار ثابت می ماند.
برای گنجاندن نسخهسازی در دادههای خود، باید Metadata.clientRecordVersion
با مقدار Long
بر اساس منطق نسخهسازی خود ارائه دهید.
val sr = StepsRecord(
count = count,
startTime = startTime,
startZoneOffset = startZoneOffset,
endTime = endTime,
endZoneOffset = endZoneOffset,
metadata = Metadata(
clientRecordId = cid,
clientRecordVersion = version
)
)
هر زمان که تغییراتی وجود داشته باشد، Upsert ها به طور خودکار 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، از وضوح مناسب استفاده کنید. استفاده از وضوح مناسب به کاهش بار ذخیره سازی کمک می کند، در حالی که همچنان داده های ثابت و دقیق را حفظ می کند. وضوح داده ها شامل 2 چیز است:
- فرکانس نوشتن : هر چند وقت یکبار برنامه شما هر داده جدیدی را به Health Connect فشار می دهد. به عنوان مثال، هر 15 دقیقه یک داده جدید بنویسید.
- دانه بندی داده های نوشته شده : هر چند وقت یکبار از داده هایی که وارد می شوند نمونه برداری شده است. به عنوان مثال، نمونه ضربان قلب را هر 5 ثانیه بنویسید. هر نوع داده ای به نرخ نمونه یکسانی نیاز ندارد. بهروزرسانی دادههای شمارش گامها در هر ثانیه، در مقایسه با آهنگ کمتر مانند هر 60 ثانیه، سود کمی دارد. با این حال، نرخ نمونه بالاتر ممکن است به کاربران نگاه دقیقتری به دادههای سلامت و تناسب اندامشان بدهد. فرکانسهای نرخ نمونه باید تعادلی بین جزئیات و عملکرد ایجاد کنند.
داده های نظارت شده در طول روز را بنویسید
برای دادههایی که بهطور مداوم جمعآوری میشوند، مانند مراحل، برنامه شما باید حداقل هر 15 دقیقه در روز به Health Connect بنویسد.
نوع داده | واحد | مورد انتظار | مثال |
مراحل | مراحل | هر 1 دقیقه | 23:14 - 23:15 - 5 قدم 23:16 - 23:17 - 22 قدم 23:17 - 23:18 - 8 قدم |
StepsCadence | گام در دقیقه | هر 1 دقیقه | 23:14 - 23:15 - 5 sppm 23:16 - 23:17 - 22 spm 23:17 - 23:18 - 8 بعد از ظهر |
ویلچر هل می دهد | هل می دهد | هر 1 دقیقه | 23:14 - 23:15 - 5 هل 23:16 - 23:17 - 22 هل 23:17 - 23:18 - 8 هل |
ActiveCalories Burned | کالری | هر 15 دقیقه | 23:15 - 23:30 - 2 کالری 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 کالری |
فاصله | کیلومتر در دقیقه | هر 1 دقیقه | 23:14-23:15 - 0.008 کیلومتر 23:16 - 23:16 - 0.021 کیلومتر 23:17 - 23:18 - 0.012 کیلومتر |
ElevationGained | متر | هر 1 دقیقه | 20:36 - 20:37 - 3.048 متر 20:39 - 20:40 - 3.048 متر 23:23 - 23:24 - 9.144 متر |
FloorsClimbed | طبقات | هر 1 دقیقه | 23:14 - 23:15 - 5 طبقه 23:16 - 23:16 - 22 طبقه 23:17 - 23:18 - 8 طبقه |
ضربان قلب | ضربان در دقیقه | هر 1 دقیقه | 6:11 صبح - 55 bpm |
HeartRateVariabilityRmssd | اماس | هر 1 دقیقه | 6:11 صبح تا 23 میلی ثانیه |
میزان تنفس | تنفس / دقیقه | هر 1 دقیقه | 23:14 - 23:15 - 60 نفس در دقیقه 23:16 - 23:16 - 62 نفس در دقیقه 23:17 - 23:18 - 64 نفس در دقیقه |
اشباع اکسیژن | % | هر 1 ساعت | 6:11 - 95.208٪ |
جلسات را بنویسید
داده ها باید در پایان جلسه تمرین یا خواب در Health Connect نوشته شوند.
به عنوان بهترین روش، هر جلسه خواب یا جلسه تمرین باید با دستگاه ضبط و ابرداده مناسب، از جمله RecordingMethod
نوشته شود.
حداقل، درخواست شما باید از راهنمای ستون "مورد انتظار" زیر پیروی کند. در صورت امکان، "بهترین" راهنمایی را دنبال کنید.
داده های ردیابی شده در طول تمرین
نوع داده | واحد | مورد انتظار | بهترین | مثال |
مراحل | مراحل | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 5 قدم 23:16 - 23:17 - 22 قدم 23:17 - 23:18 - 8 قدم |
StepsCadence | گام در دقیقه | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 35 sppm 23:16 - 23:17 - 37 sppm 23:17 - 23:18 - 40 spm |
ویلچر هل می دهد | هل می دهد | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 5 هل 23:16 - 23:17 - 22 هل 23:17 - 23:18 - 8 هل |
CyclingPedalingCadence | دور در دقیقه | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 65 دور در دقیقه 23:16 - 23:17 - 70 دور در دقیقه 23:17 - 23:18 - 68 دور در دقیقه |
قدرت | وات | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 250 وات 23:16 - 23:17 - 255 وات 23:17 - 23:18 - 245 وات |
سرعت | کیلومتر در دقیقه | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 0.3 کیلومتر در دقیقه 23:16 - 23:17 - 0.4 کیلومتر در دقیقه 23:17 - 23:18 -0.4 کیلومتر در دقیقه |
فاصله | کیلومتر بر متر | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 0.008 کیلومتر 23:16 - 23:16 - 0.021 کیلومتر 23:17 - 23:18 - 0.012 کیلومتر |
ActiveCalories Burned | کالری | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 20 کالری 23:16 - 23:17 - 20 کالری 23:17 - 23:18 - 25 کالری |
کل کالری سوزانده شده | کالری | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 36 کالری 23:16 - 23:17 - 36 کالری 23:17 - 23:18 - 41 کالری |
ElevationGained | متر | هر 1 دقیقه | هر 1 ثانیه | 20:36 - 20:37 - 3.048 متر 20:39 - 20:40 - 3.048 متر 23:23 - 23:24 - 9.144 متر |
مسیرهای تمرین | lat/lng/alt | هر 3-5 ثانیه | هر 1 ثانیه | |
ضربان قلب | ضربان در دقیقه | هر 1 دقیقه | هر 1 ثانیه | 23:14-23:15 - 150 bpm 23:16 - 23:17 -152 bpm 23:17 - 23:18 - 155 bpm |
داده های ردیابی شده در هنگام خواب
نوع داده | واحد | نمونه های مورد انتظار | مثال |
مرحله بندی خواب | مرحله | دوره زمانی دانه بندی در هر مرحله خواب | 23:46 - 23:50 - بیدار 23:50 - 23:56 - خواب سبک 23:56 - 00:16 - خواب عمیق |
Resting HeartRate | ضربان در دقیقه | ارزش روزانه تکی (انتظار میرود اول صبح) | 6:11 صبح - 60 bpm |
اشباع اکسیژن | % | ارزش روزانه تکی (انتظار میرود اول صبح) | 6:11 - 95.208٪ |