इकट्ठा किया गया डेटा देखना

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
    }
}

आंकड़ों का एग्रीगेशन

आंकड़ों के आधार पर एग्रीगेशन, सैंपल के साथ रिकॉर्ड की कम से कम, ज़्यादा से ज़्यादा या औसत वैल्यू का हिसाब लगाता है.

यहां दिए गए उदाहरण में, आंकड़ों के एग्रीगेशन का इस्तेमाल करने का तरीका बताया गया है:

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]
        val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
    } catch (e: Exception) {
        // Run error handling here
    }
}

बकेट

Health Connect की मदद से, डेटा को बकेट में भी इकट्ठा किया जा सकता है. आपके पास दो तरह की बकेट इस्तेमाल करने का विकल्प होता है. इनमें अवधि और समयावधि शामिल हैं.

कॉल करने पर, यह फ़ंक्शन बकेट की सूची दिखाता है. ध्यान दें कि सूची में कम आइटम हो सकते हैं. इसलिए, अगर किसी बकेट में कोई डेटा नहीं है, तो उसे सूची में शामिल नहीं किया जाता.

कुल अवधि

इस मामले में, इकट्ठा किए गए डेटा को तय समयावधि, जैसे कि एक मिनट या एक घंटे के हिसाब से बकेट में बांटा जाता है. डेटा को बकेट में एग्रीगेट करने के लिए, aggregateGroupByDuration का इस्तेमाल करें. यह AggregateGroupByDurationRequest ऑब्जेक्ट स्वीकार करता है. इसमें पैरामीटर के तौर पर, मेट्रिक टाइप, समयसीमा, और Duration जोड़ा जाता है.

यहां मिनट के हिसाब से बकेट में चरणों को इकट्ठा करने का उदाहरण दिया गया है:

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]
        }
    } 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]
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

पाबंदियां पढ़ना

डिफ़ॉल्ट रूप से, सभी ऐप्लिकेशन पहली बार अनुमति मिलने से पहले के 30 दिनों तक, Health Connect से डेटा पढ़ सकते हैं.

अगर आपको डिफ़ॉल्ट पाबंदियों से ज़्यादा, ईमेल पढ़ने की अनुमतियां देनी हैं, तो PERMISSION_READ_HEALTH_DATA_HISTORY का अनुरोध करें. अगर यह अनुमति नहीं दी जाती है, तो 30 दिन से ज़्यादा पुराने रिकॉर्ड पढ़ने की कोशिश करने पर गड़बड़ी का मैसेज दिखता है.

मिटाए गए ऐप्लिकेशन के लिए अनुमतियों का इतिहास

अगर कोई उपयोगकर्ता आपका ऐप्लिकेशन मिटा देता है, तो इतिहास की अनुमति के साथ-साथ सभी अनुमतियां रद्द कर दी जाती हैं. अगर उपयोगकर्ता आपके ऐप्लिकेशन को फिर से इंस्टॉल करता है और फिर से अनुमति देता है, तो वही डिफ़ॉल्ट पाबंदियां लागू होंगी. साथ ही, आपका ऐप्लिकेशन उस नई तारीख से पहले के 30 दिनों तक, Health Connect से डेटा पढ़ सकता है.

उदाहरण के लिए, मान लें कि उपयोगकर्ता ने 10 मई, 2023 को आपका ऐप्लिकेशन मिटा दिया और फिर 15 मई, 2023 को ऐप्लिकेशन को फिर से इंस्टॉल कर दिया. साथ ही, उसने डेटा पढ़ने की अनुमतियां दी हैं. अब आपका ऐप्लिकेशन, डिफ़ॉल्ट रूप से 15 अप्रैल, 2023 से पहले का डेटा पढ़ सकता है.

उपयोगकर्ता के चुने गए ऐप्लिकेशन की प्राथमिकताओं से जुड़ा एग्रीगेट डेटा

असली उपयोगकर्ता, नींद और गतिविधि के डेटा को ट्रैक करने वाले उन ऐप्लिकेशन के लिए प्राथमिकता सेट कर सकते हैं जिन्हें उन्होंने Health Connect के साथ इंटिग्रेट किया है. सिर्फ़ असली उपयोगकर्ता, प्राथमिकता वाली इन सूचियों में बदलाव कर सकते हैं. एग्रीगेट रीड करने पर, Aggregate API किसी भी डुप्लीकेट डेटा को ध्यान में रखता है और ऐप्लिकेशन का सिर्फ़ सबसे ज़्यादा प्राथमिकता वाला डेटा सेव करता है. डुप्लीकेट डेटा तब हो सकता है, जब उपयोगकर्ता के पास एक से ज़्यादा ऐप्लिकेशन हों और वे एक ही समय पर एक ही तरह का डेटा लिख रहे हों. जैसे, चरण की संख्या या तय की गई दूरी.

असली उपयोगकर्ता अपने ऐप्लिकेशन को प्राथमिकता कैसे दे सकते हैं, इस बारे में जानने के लिए Health Connect में डेटा मैनेज करना लेख पढ़ें.

उपयोगकर्ता, ऐप्लिकेशन जोड़ या हटा सकता है. साथ ही, उनकी प्राथमिकताएं भी बदल सकता है. हो सकता है कि कोई उपयोगकर्ता, डुप्लीकेट डेटा सेव करने वाले ऐप्लिकेशन को हटाना चाहे, ताकि Health Connect की स्क्रीन पर दिखने वाला डेटा, उस ऐप्लिकेशन के डेटा से मेल खाए जिसे उसने सबसे ज़्यादा प्राथमिकता दी है. डेटा का कुल योग, रीयल टाइम में अपडेट किया जाता है.

Aggregate API, उपयोगकर्ता की प्राथमिकताओं के हिसाब से डेटा को डुप्लीकेट किए बिना, गतिविधि और नींद के ऐप्लिकेशन के डेटा का हिसाब लगाता है. इसके बावजूद, डेटा को लिखने वाले हर ऐप्लिकेशन के लिए, डेटा का हिसाब अलग से लगाने के लिए, अपना लॉजिक बनाया जा सकता है.

Health Connect, गतिविधि और नींद के डेटा टाइप को ही डुप्लीकेट डेटा से हटाता है. साथ ही, Aggregate API के डुप्लीकेट डेटा हटाने के बाद, दिखाया गया कुल डेटा दिखता है. ये कुल वैल्यू, उस पूरे दिन की होती हैं जब आपके कदमों और दूरी का डेटा मौजूद होता है. अन्य तरह के ऐप्लिकेशन के लिए, उन सभी ऐप्लिकेशन की कुल संख्या, Health Connect में डेटा की कुल संख्या में दिखती है.

बैकग्राउंड में पढ़ने की सुविधा

आपके पास यह अनुरोध करने का विकल्प है कि आपका ऐप्लिकेशन बैकग्राउंड में चलता रहे और Health Connect से डेटा पढ़ता रहे. अगर आपने बैकग्राउंड में डेटा पढ़ने की अनुमति का अनुरोध किया है, तो आपका उपयोगकर्ता आपके ऐप्लिकेशन को बैकग्राउंड में डेटा पढ़ने का ऐक्सेस दे सकता है.

रिकॉर्ड के हिसाब से, एग्रीगेट किए गए डेटा के टाइप

इस टेबल में, Health Connect रिकॉर्ड के हिसाब से एग्रीगेट किए गए सभी डेटा टाइप की सूची दी गई है.

कॉन्टेंट रिकॉर्ड करने का बटन एग्रीगेट किए गए डेटा का टाइप
ActiveCaloriesBurned ACTIVE_CALORIES_TOTAL
BasalMetabolicRate BASAL_CALORIES_TOTAL
BloodPressure DIASTOLIC_AVG, DIASTOLIC_MAX, DIASTOLIC_MIN, SYSTOLIC_AVG, SYSTOLIC_MAX, SYSTOLIC_MIN
CyclingPedalingCadence RPM_AVG, RPM_MAX, RPM_MIN
Distance DISTANCE_TOTAL
ElevationGained ELEVATION_GAINED_TOTAL
ExerciseSession EXERCISE_DURATION_TOTAL
FloorsClimbed FLOORS_CLIMBED_TOTAL
HeartRate BPM_AVG, BPM_MAX, BPM_MIN, MEASUREMENTS_COUNT
Height HEIGHT_AVG, HEIGHT_MAX, HEIGHT_MIN
Hydration VOLUME_TOTAL
MindfulnessSession MINDFULNESS_DURATION_TOTAL
Nutrition BIOTIN_TOTAL, CAFFEINE_TOTAL, CALCIUM_TOTAL, CHLORIDE_TOTAL, CHOLESTEROL_TOTAL, CHROMIUM_TOTAL, COPPER_TOTAL, DIETARY_FIBER_TOTAL, ENERGY_FROM_FAT_TOTAL, ENERGY_TOTAL, FOLATE_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
Power POWER_AVG, POWER_MAX, POWER_MIN
RestingHeartRate BPM_AVG, BPM_MAX, BPM_MIN
SkinTemperature TEMPERATURE_DELTA_AVG, TEMPERATURE_DELTA_MAX, TEMPERATURE_DELTA_MIN
SleepSession SLEEP_DURATION_TOTAL
Speed SPEED_AVG, SPEED_MAX, SPEED_MIN
Steps COUNT_TOTAL
StepsCadence RATE_AVG, RATE_MAX, RATE_MIN
TotalCaloriesBurned ENERGY_TOTAL
Weight WEIGHT_AVG, WEIGHT_MAX, WEIGHT_MIN
WheelchairPushes COUNT_TOTAL