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

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

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

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

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

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

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

उदाहरण के लिए, मान लें कि उपयोगकर्ता ने 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