সমষ্টিগত ডেটা পড়ুন

Health Connect-এ ডেটা একত্রিত করার ক্ষেত্রে মৌলিক একত্রিতকরণ বা বাকেটগুলিতে ডেটা একত্রিত করা অন্তর্ভুক্ত। নিম্নলিখিত কর্মপ্রবাহগুলি আপনাকে উভয়ই কীভাবে করতে হয় তা দেখায়।

মৌলিক সমষ্টি

আপনার ডেটাতে বেসিক অ্যাগ্রিগেশন ব্যবহার করতে, আপনার HealthConnectClient অবজেক্টে aggregate ফাংশনটি ব্যবহার করুন। এটি একটি AggregateRequest অবজেক্ট গ্রহণ করে যেখানে আপনি মেট্রিক প্রকার এবং সময় পরিসরকে এর প্যারামিটার হিসেবে যোগ করেন। বেসিক অ্যাগ্রিগেটগুলিকে কীভাবে ডাকা হবে তা ব্যবহৃত মেট্রিক প্রকারের উপর নির্ভর করে।

ক্রমবর্ধমান সমষ্টি

ক্রমবর্ধমান সমষ্টি মোট মান গণনা করে।

নিচের উদাহরণটি আপনাকে দেখায় কিভাবে একটি ডেটা টাইপের জন্য ডেটা একত্রিত করতে হয়:

suspend fun aggregateDistance(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        // The result may be null if no data is available in the time range
        val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L
    } catch (e: Exception) {
        // Run error handling here
    }
}

ডেটা উৎস অনুসারে ফিল্টার করুন

আপনি সমষ্টিগত ডেটার উৎস অনুসারেও ফিল্টার করতে পারেন। উদাহরণস্বরূপ, শুধুমাত্র একটি নির্দিষ্ট অ্যাপ দ্বারা লিখিত ডেটা অন্তর্ভুক্ত করা।

নিম্নলিখিত উদাহরণে দেখানো হয়েছে কিভাবে dataOriginFilter এবং AggregateRequest ব্যবহার করে একটি নির্দিষ্ট অ্যাপ থেকে ধাপগুলি একত্রিত করতে হয়:

suspend fun aggregateStepsFromSpecificApp(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant,
    appPackageName: String
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(StepsRecord.COUNT_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                dataOriginFilter = setOf(DataOrigin(appPackageName))
            )
        )
        // The result may be null if no data is available in the time range
        val totalSteps = response[StepsRecord.COUNT_TOTAL] ?: 0L
    } catch (e: Exception) {
        // Run error handling here
    }
}

পরিসংখ্যানগত সমষ্টি

পরিসংখ্যানগত সমষ্টি নমুনার সাহায্যে রেকর্ডের সর্বনিম্ন, সর্বোচ্চ, অথবা গড় মান গণনা করে।

নিম্নলিখিত উদাহরণটি পরিসংখ্যানগত সমষ্টি কীভাবে ব্যবহার করতে হয় তা দেখায়:

suspend fun aggregateHeartRate(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response =
            healthConnectClient.aggregate(
                AggregateRequest(
                    setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
                )
            )
        // The result may be null if no data is available in the time range
        val minimumHeartRate = response[HeartRateRecord.BPM_MIN] ?: 0L
        val maximumHeartRate = response[HeartRateRecord.BPM_MAX] ?: 0L
    } catch (e: Exception) {
        // Run error handling here
    }
}

বালতি

হেলথ কানেক্ট আপনাকে বাকেটগুলিতে ডেটা একত্রিত করতেও সাহায্য করতে পারে। আপনি যে দুই ধরণের বাকেট ব্যবহার করতে পারেন তার মধ্যে রয়েছে সময়কাল এবং সময়কাল

একবার কল করার পর, তারা বাকেটের একটি তালিকা ফেরত দেয়। মনে রাখবেন যে তালিকাটি বিরল হতে পারে, তাই যদি কোনও বাকেটের মধ্যে কোনও ডেটা না থাকে তবে তা তালিকায় অন্তর্ভুক্ত করা হয় না।

সময়কাল

এই ক্ষেত্রে, সমষ্টিগত ডেটা একটি নির্দিষ্ট সময়ের মধ্যে, যেমন এক মিনিট বা এক ঘন্টার মধ্যে বাকেটগুলিতে বিভক্ত হয়। বাকেটগুলিতে ডেটা একত্রিত করতে, aggregateGroupByDuration ব্যবহার করুন। এটি একটি AggregateGroupByDurationRequest অবজেক্ট গ্রহণ করে যেখানে আপনি মেট্রিক প্রকার, সময় পরিসীমা এবং Duration প্যারামিটার হিসাবে যোগ করেন। আপনি TimeRangeFilterstartTime এবং endTime এর জন্য Instant বা LocalDateTime অবজেক্টের জোড়া ব্যবহার করতে পারেন।

ধাপগুলিকে মিনিট-দীর্ঘ বালতিতে একত্রিত করার একটি উদাহরণ নিচে দেখানো হল:

suspend fun aggregateStepsIntoMinutes(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByDuration(
                AggregateGroupByDurationRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Duration.ofMinutes(1L)
                )
            )
        for (durationResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = durationResult.result[StepsRecord.COUNT_TOTAL] ?: 0L
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

সময়কাল

এই ক্ষেত্রে, সমষ্টিগত ডেটা তারিখ-ভিত্তিক সময়ের মধ্যে, যেমন এক সপ্তাহ বা এক মাসের মধ্যে বাকেটগুলিতে বিভক্ত হয়। বাকেটগুলিতে ডেটা একত্রিত করতে, aggregateGroupByPeriod ব্যবহার করুন। এটি একটি AggregateGroupByPeriodRequest অবজেক্ট গ্রহণ করে যেখানে আপনি মেট্রিক প্রকার, সময় পরিসীমা এবং Period প্যারামিটার হিসাবে যোগ করেন।

মাসিক বাকেটগুলিতে ধাপগুলি একত্রিত করার একটি উদাহরণ নিচে দেখানো হল:

suspend fun aggregateStepsIntoMonths(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByPeriod(
                AggregateGroupByPeriodRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Period.ofMonths(1)
                )
            )
        for (monthlyResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL] ?: 0L
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

পড়ার বিধিনিষেধ

ডিফল্টরূপে, সমস্ত অ্যাপ্লিকেশন কোনও অনুমতি প্রথম মঞ্জুর হওয়ার 30 দিন আগে পর্যন্ত Health Connect থেকে ডেটা পড়তে পারে।

যদি আপনার ডিফল্ট বিধিনিষেধের বাইরে পড়ার অনুমতি বাড়ানোর প্রয়োজন হয়, তাহলে PERMISSION_READ_HEALTH_DATA_HISTORY অনুরোধ করুন। অন্যথায়, এই অনুমতি ছাড়া, 30 দিনের বেশি পুরনো রেকর্ড পড়ার চেষ্টা করলে একটি ত্রুটি দেখা দেয়।

মুছে ফেলা অ্যাপের অনুমতির ইতিহাস

যদি কোনও ব্যবহারকারী আপনার অ্যাপটি মুছে ফেলেন, তাহলে ইতিহাসের অনুমতি সহ সমস্ত অনুমতি বাতিল করা হবে। যদি ব্যবহারকারী আপনার অ্যাপটি পুনরায় ইনস্টল করে আবার অনুমতি দেয়, তাহলে একই ডিফল্ট বিধিনিষেধ প্রযোজ্য হবে এবং আপনার অ্যাপটি সেই নতুন তারিখের 30 দিন আগে পর্যন্ত Health Connect থেকে ডেটা পড়তে পারবে।

উদাহরণস্বরূপ, ধরুন ব্যবহারকারী ১০ মে, ২০২৩ তারিখে আপনার অ্যাপটি মুছে ফেলেন এবং তারপর ১৫ মে, ২০২৩ তারিখে অ্যাপটি পুনরায় ইনস্টল করেন এবং পড়ার অনুমতি দেন। আপনার অ্যাপটি এখন ডিফল্টভাবে ডেটা পড়ার প্রথম তারিখ হল ১৫ এপ্রিল, ২০২৩

ব্যবহারকারী-নির্বাচিত অ্যাপের অগ্রাধিকার দ্বারা প্রভাবিত সমষ্টিগত ডেটা

হেলথ কানেক্টের সাথে ইন্টিগ্রেটেড স্লিপ এবং অ্যাক্টিভিটি অ্যাপগুলির জন্য ব্যবহারকারীরা অগ্রাধিকার নির্ধারণ করতে পারেন। শুধুমাত্র ব্যবহারকারীরা এই অগ্রাধিকার তালিকাগুলি পরিবর্তন করতে পারেন। যখন আপনি একটি সমষ্টিগত পঠন সম্পাদন করেন, তখন সমষ্টিগত API যেকোনো ডুপ্লিকেট ডেটার জন্য হিসাব করে এবং কেবলমাত্র সর্বোচ্চ অগ্রাধিকার সহ অ্যাপ থেকে ডেটা রাখে। ব্যবহারকারীর যদি একই ধরণের ডেটা লেখার জন্য একাধিক অ্যাপ থাকে—যেমন নেওয়া পদক্ষেপের সংখ্যা বা কভার করা দূরত্ব—একই সময়ে, তাহলে ডুপ্লিকেট ডেটা বিদ্যমান থাকতে পারে।

চিত্রটিতে অ্যাপের অগ্রাধিকারগুলি পুনঃক্রম দেখানো হচ্ছে
চিত্র ১ : অ্যাপের অগ্রাধিকারগুলি পুনঃক্রম করুন

চিত্রটিতে অ্যাপের অগ্রাধিকারগুলি পুনঃক্রম দেখানো হচ্ছে

ব্যবহারকারীরা কীভাবে তাদের অ্যাপগুলিকে অগ্রাধিকার দিতে পারেন সে সম্পর্কে তথ্যের জন্য, হেলথ কানেক্ট ডেটা পরিচালনা করুন দেখুন।

ব্যবহারকারী অ্যাপ যোগ করতে বা অপসারণ করতে পারেন এবং তাদের অগ্রাধিকার পরিবর্তন করতে পারেন। একজন ব্যবহারকারী এমন একটি অ্যাপ অপসারণ করতে চাইতে পারেন যা ডুপ্লিকেট ডেটা লিখছে যাতে হেলথ কানেক্ট স্ক্রিনে থাকা ডেটার মোট পরিমাণ তাদের সর্বোচ্চ অগ্রাধিকার দেওয়া অ্যাপের সাথে অভিন্ন হয়। ডেটার মোট পরিমাণ রিয়েল টাইমে আপডেট করা হয়।

যদিও Aggregate API ব্যবহারকারীর অগ্রাধিকার নির্ধারণের উপর ভিত্তি করে ডেটা ডিডুপ করে অ্যাক্টিভিটি এবং স্লিপ অ্যাপের ডেটা গণনা করে, তবুও আপনি প্রতিটি অ্যাপের জন্য আলাদাভাবে ডেটা গণনা করার জন্য নিজস্ব যুক্তি তৈরি করতে পারেন যা সেই ডেটা লেখার জন্য উপযুক্ত।

Health Connect শুধুমাত্র Activity এবং Sleep ডেটা টাইপগুলি ডিডুপ করে এবং দেখানো ডেটার মোট মান হল Aggregate API দ্বারা ডিডুপ করার পরে। এই মোটগুলি সাম্প্রতিকতম পূর্ণ দিনের ডেটা দেখায় যেখানে পদক্ষেপ এবং দূরত্বের জন্য ডেটা বিদ্যমান। অন্যান্য ধরণের ডেটার জন্য, সমষ্টিগত ফলাফলগুলি ডেটা লেখা সমস্ত অ্যাপ থেকে Health Connect-এ থাকা ধরণের সমস্ত ডেটা একত্রিত করে।

পটভূমি পাঠ

আপনি আপনার অ্যাপ্লিকেশনটিকে ব্যাকগ্রাউন্ডে চালানোর এবং হেলথ কানেক্ট থেকে ডেটা পড়ার অনুরোধ করতে পারেন। আপনি যদি ব্যাকগ্রাউন্ড রিডের অনুমতি চান, তাহলে আপনার ব্যবহারকারী আপনার অ্যাপটিকে ব্যাকগ্রাউন্ডে ডেটা পড়ার অ্যাক্সেস দিতে পারবেন।

রেকর্ড অনুসারে সমর্থিত সমষ্টিগত ডেটা প্রকার

এই টেবিলে Health Connect রেকর্ড অনুসারে সমস্ত সমর্থিত সমষ্টিগত ডেটা প্রকারের তালিকা রয়েছে।

সারণী: রেকর্ড অনুসারে সমর্থিত সমষ্টিগত ডেটা প্রকার
রেকর্ড সমষ্টিগত ডেটা টাইপ
ActiveCaloriesBurnedRecord ACTIVE_CALORIES_TOTAL
ActivityIntensityRecord DURATION_TOTAL , INTENSITY_MINUTES_TOTAL , MODERATE_DURATION_TOTAL , VIGOROUS_DURATION_TOTAL
BasalMetabolicRateRecord BASAL_CALORIES_TOTAL
BloodPressureRecord DIASTOLIC_AVG , DIASTOLIC_MAX , DIASTOLIC_MIN , SYSTOLIC_AVG , SYSTOLIC_MAX , SYSTOLIC_MIN
CyclingPedalingCadenceRecord RPM_AVG , RPM_MAX , RPM_MIN
DistanceRecord DISTANCE_TOTAL
ElevationGainedRecord ELEVATION_GAINED_TOTAL
ExerciseSessionRecord EXERCISE_DURATION_TOTAL
FloorsClimbedRecord FLOORS_CLIMBED_TOTAL
HeartRateRecord BPM_AVG , BPM_MAX , BPM_MIN , MEASUREMENTS_COUNT
HeightRecord HEIGHT_AVG , HEIGHT_MAX , HEIGHT_MIN
HydrationRecord VOLUME_TOTAL
MindfulnessSessionRecord MINDFULNESS_DURATION_TOTAL
NutritionRecord BIOTIN_TOTAL , CAFFEINE_TOTAL , CALCIUM_TOTAL , CHOLESTEROL_TOTAL CHLORIDE_TOTAL , CHROMIUM_TOTAL , COPPER_TOTAL , ENERGY_FROM_FAT_TOTAL তামা, মোট DIETARY_FIBER_TOTAL , FOLATE_TOTAL ENERGY_TOTAL , মোট শক্তি, FOLIC_ACID_TOTAL , IODINE_TOTAL , মোট IRON_TOTAL , MAGNESIUM_TOTAL , MANGANESE_TOTAL , MOLYBDENUM_TOTAL , MONOUNSATURATED_FAT_TOTAL ফ্যাট, NIACIN_TOTAL , PANTOTHENIC_ACID_TOTAL , PHOSPHORUS_TOTAL , POLYUNSATURATED_FAT_TOTAL ফ্যাট, POTASSIUM_TOTAL , PROTEIN_TOTAL , RIBOFLAVIN_TOTAL , SATURATED_FAT_TOTAL , SELENIUM_TOTAL , SODIUM_TOTAL , SUGAR_TOTAL , THIAMIN_TOTAL , TOTAL_CARBOHYDRATE_TOTAL , TOTAL_FAT_TOTAL , TRANS_FAT_TOTAL , UNSATURATED_FAT_TOTAL , VITAMIN_A_TOTAL , VITAMIN_B12_TOTAL , VITAMIN_B6_TOTAL , VITAMIN_C_TOTAL , VITAMIN_D_TOTAL , VITAMIN_E_TOTAL , VITAMIN_K_TOTAL , ZINC_TOTAL
PowerRecord POWER_AVG , POWER_MAX , POWER_MIN
RestingHeartRateRecord BPM_AVG , BPM_MAX , BPM_MIN
SkinTemperatureRecord TEMPERATURE_DELTA_AVG , TEMPERATURE_DELTA_MAX , TEMPERATURE_DELTA_MIN
SleepSessionRecord SLEEP_DURATION_TOTAL
SpeedRecord SPEED_AVG , SPEED_MAX , SPEED_MIN
StepsRecord COUNT_TOTAL
StepsCadenceRecord RATE_AVG , RATE_MAX , RATE_MIN
TotalCaloriesBurnedRecord ENERGY_TOTAL
WeightRecord WEIGHT_AVG , WEIGHT_MAX , WEIGHT_MIN
WheelchairPushesRecord COUNT_TOTAL