হেলথ কানেক্টে একটি সেশন হল একটি সময়ের ব্যবধান যেখানে একজন ব্যবহারকারী একটি কার্যকলাপ সম্পাদন করে। SleepSessionRecord
এবং ExerciseSessionRecord
ডেটা প্রকার উভয়ই সেশন।
সেশনগুলি ব্যবহারকারীদের একটি নির্দিষ্ট সময়ের মধ্যে সময়-ভিত্তিক কর্মক্ষমতা পরিমাপ করতে দেয়, যেমন ক্রমাগত হার্ট রেট বা অবস্থান ডেটা।
ExerciseSessionRecord
সেশনে দৌড় থেকে ব্যাডমিন্টন পর্যন্ত বিভিন্ন ধরনের কার্যকলাপ অন্তর্ভুক্ত থাকে।
SleepSessionRecord
সেশনগুলিতে এমন ডেটা থাকে যা ঘুমের পর্যায়গুলি রেকর্ড করে, যেমন AWAKE
, SLEEPING
এবং DEEP
।
সাবটাইপ ডেটা হল ডেটা যা একটি সেশনের "অন্তর্ভুক্ত" এবং শুধুমাত্র তখনই অর্থবহ হয় যখন এটি একটি প্যারেন্ট সেশন, যেমন ঘুমের পর্যায়, ব্যায়াম বিভাগের সাথে পড়া হয়।
সংশ্লিষ্ট ডেটা, Record
ডেটা আলাদাভাবে বা অন্যান্য সেশনের পাশাপাশি পড়া যায়, যেমন পদক্ষেপ, হার্ট রেট।
সাধারণ নির্দেশিকা
হেলথ কানেক্টের সেশনগুলির সাথে কীভাবে কাজ করতে হয় সে সম্পর্কে এখানে কিছু সেরা অনুশীলন নির্দেশিকা রয়েছে৷
- একটি নির্দিষ্ট ওয়ার্কআউট বা কার্যকলাপ থেকে ডেটা যোগ করতে বা ঘুমের জন্য সেশনগুলি ব্যবহার করা উচিত:
suspend fun writeExerciseSession(healthConnectClient: HealthConnectClient) {
healthConnectClient.insertRecords(
listOf(
ExerciseSessionRecord(
startTime = Instant.parse("2022-05-10T10:00:00.000Z"),
startZoneOffset = ZoneOffset.of("-08:00"),
endTime = Instant.parse("2022-05-10T11:00:00.000Z"),
endZoneOffset = ZoneOffset.of("-08:00"),
exerciseType = ExerciseSessionRecord.ExerciseType.WALKING,
title = "My Walk"
),
StepsRecord(
startTime = Instant.parse("2022-05-10T10:00:00.000Z"),
startZoneOffset = ZoneOffset.of("-08:00"),
endTime = Instant.parse("2022-05-10T10:30:00.000Z"),
endZoneOffset = ZoneOffset.of("-08:00"),
count = 2800
),
StepsRecord(
startTime = Instant.parse("2022-05-10T10:30:00.000Z"),
startZoneOffset = ZoneOffset.of("-08:00"),
endTime = Instant.parse("2022-05-10T11:00:00.000Z"),
endZoneOffset = ZoneOffset.of("-08:00"),
count = 3200
),
)
)
}
- সেশনগুলি সাধারণ পরিমাপের জন্য ব্যবহার করা উচিত নয় , যেমন দৈনিক ধাপের সংখ্যা।
- সাবটাইপ ডেটাতে একটি UID থাকে না, তবে সংশ্লিষ্ট ডেটাতে স্বতন্ত্র UID থাকে।
- সাবটাইপ ডেটাকে একটি সেশনে সারিবদ্ধ করা প্রয়োজন যাতে ওভারল্যাপ হয় না এমন ক্রমিক টাইমস্ট্যাম্প। ফাঁক অনুমোদিত, তবে.
- যদি ব্যবহারকারী একটি সেশনের সাথে ডেটা যুক্ত করতে চান (এবং এর অংশ হিসাবে ট্র্যাক করতে চান) তবে সেশনগুলি উপযোগী হয়, ক্রমাগত রেকর্ড না করে।
ঘুমের সেশন
আপনি Health Connect-এ ঘুমের ডেটা পড়তে বা লিখতে পারেন। ঘুমের ডেটা একটি সেশন হিসাবে প্রদর্শিত হয় এবং 8টি স্বতন্ত্র ঘুমের পর্যায়ে বিভক্ত করা যেতে পারে:
-
UNKNOWN
: ব্যবহারকারী ঘুমাচ্ছেন কিনা তা অনির্দিষ্ট বা অজানা। -
AWAKE
: ব্যবহারকারী ঘুমের চক্রের মধ্যে জেগে থাকে, দিনের বেলা নয়। -
SLEEPING
: সাধারণ বা অ দানাদার ঘুমের বিবরণ। -
OUT_OF_BED
: ব্যবহারকারী একটি ঘুমের সেশনের মাঝখানে বিছানা থেকে উঠে যায়। -
AWAKE_IN_BED
: ব্যবহারকারী বিছানায় জেগে আছে। -
LIGHT
: ব্যবহারকারী একটি হালকা ঘুমের চক্রে রয়েছে৷ -
DEEP
: ব্যবহারকারী একটি গভীর ঘুমের চক্রে রয়েছে৷ -
REM
: ব্যবহারকারী একটি REM ঘুমের চক্রে রয়েছে৷
এই মানগুলি একটি সময় সীমার মধ্যে একজন ব্যবহারকারীর ঘুমের ধরনের প্রতিনিধিত্ব করে। ঘুমের পর্যায়গুলি লেখা ঐচ্ছিক, তবে উপলব্ধ হলে সুপারিশ করা হয়।
ঘুমের পর্যায় সহ বা ছাড়া ঘুমের সেশন লিখুন
SleepSessionRecord
ডেটা টাইপের দুটি অংশ রয়েছে:
- সামগ্রিক অধিবেশন, ঘুমের পুরো সময়কাল জুড়ে।
- ঘুমের সময় স্বতন্ত্র পর্যায় যেমন হালকা ঘুম বা গভীর ঘুম।
এখানে আপনি কিভাবে পর্যায় ছাড়াই একটি ঘুমের অধিবেশন সন্নিবেশ করান:
SleepSessionRecord(
title = "weekend sleep",
startTime = startTime,
endTime = endTime,
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
)
ঘুমের সেশনের পুরো সময়কে কভার করে এমন পর্যায়গুলি কীভাবে যুক্ত করবেন তা এখানে রয়েছে:
val stages = listOf(
SleepSessionRecord.Stage(
startTime = START_TIME
endTime = END_TIME,
stage = SleepSessionRecord.STAGE_TYPE_SLEEPING,
)
)
SleepSessionRecord(
title = "weekend sleep",
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET,
stages = stages,
)
}
একটি ঘুম অধিবেশন পড়ুন
ফিরে আসা প্রতিটি ঘুমের সেশনের জন্য, আপনার ঘুমের পর্যায়ের ডেটাও উপস্থিত আছে কিনা তা পরীক্ষা করা উচিত:
suspend fun readSleepSessions(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
val response =
healthConnectClient.readRecords(
ReadRecordsRequest(
SleepSessionRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (sleepRecord in response.records) {
// Retrieve relevant sleep stages from each sleep record
val sleepStages = sleepRecord.stages
}
}
একটি ঘুম অধিবেশন মুছুন
এইভাবে একটি সেশন মুছে ফেলতে হয়। এই উদাহরণের জন্য, আমরা একটি ঘুমের অধিবেশন ব্যবহার করেছি:
suspend fun deleteSleepSession(
healthConnectClient: HealthConnectClient,
sleepRecord: SleepSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
}
ব্যায়াম সেশন
ব্যায়াম সেশনে দৌড় থেকে শুরু করে ব্যাডমিন্টন পর্যন্ত যেকোনো কিছু অন্তর্ভুক্ত থাকতে পারে।
ব্যায়াম সেশন লিখুন
এইভাবে একটি সন্নিবেশের অনুরোধ তৈরি করতে হয় যাতে একটি সেশন অন্তর্ভুক্ত থাকে:
suspend fun writeExerciseSession(healthConnectClient: HealthConnectClient) {
healthConnectClient.insertRecords(
listOf(
ExerciseSessionRecord(
startTime = START_TIME,
startZoneOffset = START_ZONE_OFFSET,
endTime = END_TIME,
endZoneOffset = END_ZONE_OFFSET,
exerciseType = ExerciseSessionRecord.ExerciseType.RUNNING,
title = "My Run"
),
DistanceRecord(
startTime = START_TIME,
startZoneOffset = START_ZONE_OFFSET,
endTime = END_TIME,
endZoneOffset = END_ZONE_OFFSET,
distance = 5000.meters
),
// ... other records
)
)
}
নোট করুন কিভাবে পূর্ববর্তী উদাহরণে, Distance
জন্য একটি রেকর্ড যোগ করা হয়েছে, যা সেশনের পুরো সময়কালকে বিস্তৃত করে, কিন্তু ডেটা ভিন্ন গ্রানুলিটি সহ যোগ করা যেতে পারে।
যদি অ্যাপটি দৌড়ের সময় নিয়মিত দূরত্ব পরিমাপ করে থাকে, তাহলে আরেকটি পদ্ধতিতে অনেকগুলি দূরত্বের রেকর্ড অন্তর্ভুক্ত করা হবে, প্রতিটি রানের একটি অংশে কভার করা দূরত্বকে প্রতিনিধিত্ব করে।
একটি ব্যায়াম অধিবেশন পড়ুন
একটি ব্যায়াম সেশন কিভাবে পড়তে হয় তার একটি উদাহরণ এখানে দেওয়া হল:
suspend fun readExerciseSessions(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
val response =
healthConnectClient.readRecords(
ReadRecordsRequest(
ExerciseSessionRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (exerciseRecord in response.records) {
// Process each exercise record
// Optionally pull in with other data sources of the same time range.
val distanceRecord =
healthConnectClient
.readRecords(
ReadRecordsRequest(
DistanceRecord::class,
timeRangeFilter =
TimeRangeFilter.between(
exerciseRecord.startTime,
exerciseRecord.endTime
)
)
)
.records
}
}
উপ-টাইপ ডেটা লিখুন
সেশনগুলি অ-বাধ্যতামূলক সাব-টাইপ ডেটা নিয়েও গঠিত হতে পারে, যা অতিরিক্ত তথ্য দিয়ে সেশনকে সমৃদ্ধ করে।
উদাহরণ স্বরূপ, ব্যায়াম সেশনে ExerciseSegment
, ExerciseLap
এবং ExerciseRoute
ক্লাস অন্তর্ভুক্ত থাকতে পারে:
val segments = listOf(
ExerciseSegment(
startTime = Instant.parse("2022-01-02T10:10:10Z"),
endTime = Instant.parse("2022-01-02T10:10:13Z"),
segmentType = ActivitySegmentType.BENCH_PRESS,
repetitions = 373
)
)
val laps = listOf(
ExerciseLap(
startTime = Instant.parse("2022-01-02T10:10:10Z"),
endTime = Instant.parse("2022-01-02T10:10:13Z"),
length = 0.meters
)
)
ExerciseSessionRecord(
exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_CALISTHENICS,
startTime = Instant.parse("2022-01-02T10:10:10Z"),
endTime = Instant.parse("2022-01-02T10:10:13Z"),
startZoneOffset = ZoneOffset.UTC,
endZoneOffset = ZoneOffset.UTC,
segments = segments,
laps = laps,
route = route
)
একটি অনুশীলন সেশন মুছুন
একটি ব্যায়াম অধিবেশন মুছে ফেলার দুটি উপায় আছে:
- সময় পরিসীমা দ্বারা.
- ইউআইডি দ্বারা।
সময়সীমা অনুসারে আপনি কীভাবে সাব-টাইপ ডেটা মুছবেন তা এখানে:
suspend fun deleteExerciseSession(
healthConnectClient: HealthConnectClient,
exerciseRecord: ExerciseSessionRecord,
) {
val timeRangeFilter = TimeRangeFilter.between(sleepRecord.startTime, sleepRecord.endTime)
healthConnectClient.deleteRecords(SleepSessionRecord::class, timeRangeFilter)
// delete the associated distance record
healthConnectClient.deleteRecords(DistanceRecord::class, timeRangeFilter)
}
আপনি UID দ্বারা সাব-টাইপ ডেটাও মুছতে পারেন। তবে, এটি করলে, শুধুমাত্র ব্যায়াম সেশন মুছে যাবে, সংশ্লিষ্ট ডেটা নয়:
suspend fun deleteExerciseSession(
healthConnectClient: HealthConnectClient,
exerciseRecord: ExerciseSessionRecord,
) {
healthConnectClient.deleteRecords(
ExerciseSessionRecord::class,
recordIdsList = listOf(exerciseRecord.metadata.id),
clientRecordIdsList = emptyList()
)
}