अगर आपको ऐसा ऐप्लिकेशन बनाना है जो उपयोगकर्ता के वाइटल को मैनेज करता है, तो Health Connect का इस्तेमाल करके ये काम किए जा सकते हैं:
- अन्य ऐप्लिकेशन से, शरीर से जुड़ी ज़रूरी जानकारी का डेटा पढ़ना. जैसे, ब्लड प्रेशर, धड़कन की दर, और शरीर का तापमान
- आपके ऐप्लिकेशन या कनेक्ट किए गए डिवाइसों से रिकॉर्ड किए गए वाइटल्स डेटा को सेव करना
- अहम अंगों की स्थिति से जुड़े डेटा के आधार पर, रुझानों को मॉनिटर करना और स्वास्थ्य से जुड़ी अहम जानकारी देना
इस गाइड में, वाइटल्स के डेटा टाइप के साथ काम करने का तरीका बताया गया है. इसमें अनुमतियां, डेटा को पढ़ने और उसमें बदलाव करने के वर्कफ़्लो, और सबसे सही तरीके शामिल हैं.
खास जानकारी: Android के बारे में पूरी जानकारी देने वाला ट्रैकर बनाना
Health Connect का इस्तेमाल करके, अहम स्वास्थ्य मेट्रिक को ट्रैक करने की सुविधा बनाई जा सकती है. इसके लिए, यह तरीका अपनाएं:
- वाइटल्स के डेटा टाइप के लिए सही अनुमतियों का अनुरोध करना.
BloodPressureRecord,HeartRateRecord, और अन्य ज़रूरी जानकारी के रिकॉर्ड जैसे रिकॉर्ड का इस्तेमाल करके, ज़रूरी जानकारी का डेटा लिखना.- डिसप्ले, विश्लेषण या सिंक करने के लिए, सेहत से जुड़ा डेटा ऐक्सेस करना.
- डेटा को बेहतर तरीके से लिखने और पढ़ने के लिए, बैचिंग का इस्तेमाल करना.
इस वर्कफ़्लो से, Health Connect के साथ काम करने वाले अन्य ऐप्लिकेशन के साथ इंटरऑपरेबिलिटी को चालू किया जा सकता है. साथ ही, इससे यह पुष्टि की जा सकती है कि उपयोगकर्ता के पास डेटा ऐक्सेस करने का कंट्रोल है.
शुरू करने से पहले
वाइटल्स की सुविधाओं को लागू करने से पहले:
- सही डिपेंडेंसी का इस्तेमाल करके, Health Connect को इंटिग्रेट करें.
HealthConnectClientइंस्टेंस बनाएं.- पुष्टि करें कि आपका ऐप्लिकेशन, Health Permissions के आधार पर रनटाइम की अनुमति से जुड़े फ़्लो लागू करता हो.
वीडियो के विषय से जुड़े मुख्य कॉन्सेप्ट
Health Connect में, वाइटल डेटा को अलग-अलग तरह के रिकॉर्ड के तौर पर दिखाया जाता है. हर रिकॉर्ड, शरीर की किसी खास गतिविधि को मेज़र करने से जुड़ा होता है. वर्कआउट सेशन के उलट, वाइटल को अक्सर किसी समय के हिसाब से या इंटरवल के आधार पर रिकॉर्ड किया जाता है.
वाइटल्स के डेटा टाइप
वाइटल डेटा को अलग-अलग रिकॉर्ड टाइप के हिसाब से दिखाया जाता है. सामान्य टाइप में ये शामिल हैं:
BloodPressureRecord: यह ब्लड प्रेशर की एक रीडिंग के बारे में बताता है. इसमें सिस्टोलिक और डायस्टोलिक प्रेशर के साथ-साथ शरीर की पोज़िशन भी शामिल होती है.HeartRateRecord: इससे धड़कन की दर के मेज़रमेंट की सीरीज़ का पता चलता है.RestingHeartRateRecord: इससे आराम करते समय धड़कन की दर की एक मेज़रमेंट का पता चलता है.BodyTemperatureRecord: यह शरीर के तापमान की एक रीडिंग को दिखाता है. इसमें तापमान मापने की जगह की जानकारी भी शामिल होती है.BloodGlucoseRecord: यह ब्लड ग्लूकोज़ की एक रीडिंग को दिखाता है. इसमें खाने और नमूने के सोर्स से जुड़ी जानकारी भी शामिल होती है.OxygenSaturationRecord: इससे खून में ऑक्सीजन की मात्रा की एक रीडिंग का पता चलता है.RespiratoryRateRecord: यह सांस की दर को मापने की एक वैल्यू दिखाता है.
डेटा टाइप की पूरी सूची देखने के लिए, Health Connect के डेटा टाइप देखें.
डेवलपमेंट से जुड़ी बातें
वाइटल्स का डेटा संवेदनशील हो सकता है. ऐप्लिकेशन को सेंसर या उपयोगकर्ता के इनपुट से मिले मेज़रमेंट के जवाब में डेटा लिखना पड़ सकता है. इसके अलावा, उन्हें बैकएंड से डेटा सिंक करने की भी ज़रूरत पड़ सकती है. सेहत से जुड़े डेटा को मैनेज करने के लिए, अनुमतियां ज़रूरी होती हैं.
अनुमतियां
आपके ऐप्लिकेशन को, ज़रूरी हेल्थ कनेक्ट अनुमतियों का अनुरोध करना होगा. ऐसा, वाइटल्स का डेटा पढ़ने या उसमें बदलाव करने से पहले करना होगा. सेहत से जुड़ी ज़रूरी जानकारी के लिए, आम तौर पर ये अनुमतियां मांगी जाती हैं: ब्लड प्रेशर, धड़कन की दर, शरीर का तापमान, ब्लड ग्लूकोज़, ऑक्सीजन की मात्रा, और सांस की दर. इसमें ये शामिल हैं:
- ब्लड प्रेशर:
BloodPressureRecordके लिए, पढ़ने और लिखने की अनुमतियां. - धड़कन की दर:
HeartRateRecordके लिए, पढ़ने और लिखने की अनुमतियां. - आराम करते समय धड़कन की दर:
RestingHeartRateRecordके लिए, डेटा ऐक्सेस करने, जोड़ने, स्टोर करने, और उसमें बदलाव करने की अनुमतियां. - शरीर का तापमान:
BodyTemperatureRecordके लिए, पढ़ने और लिखने की अनुमतियां. - ब्लड ग्लूकोज़:
BloodGlucoseRecordके लिए, डेटा पढ़ने और उसमें बदलाव करने की अनुमतियां. - ऑक्सीजन की मात्रा:
OxygenSaturationRecordके लिए, पढ़ने और लिखने की अनुमतियां. - सांस की दर:
RespiratoryRateRecordके लिए, डेटा ऐक्सेस करने और उसमें बदलाव करने की अनुमतियां.
यहां ब्लड प्रेशर, धड़कन की दर, और शरीर के तापमान की जानकारी ऐक्सेस करने की अनुमतियों का अनुरोध करने का एक उदाहरण दिया गया है:
क्लाइंट इंस्टेंस बनाने के बाद, आपके ऐप्लिकेशन को उपयोगकर्ता से अनुमतियों का अनुरोध करना होगा. उपयोगकर्ताओं के पास किसी भी समय अनुमतियां देने या अस्वीकार करने का विकल्प ज़रूर होना चाहिए.
इसके लिए, ज़रूरी डेटा टाइप के लिए अनुमतियों का सेट बनाएं. पक्का करें कि सेट में मौजूद अनुमतियों का एलान, सबसे पहले आपके Android मेनिफ़ेस्ट में किया गया हो.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(BloodPressureRecord::class),
HealthPermission.getWritePermission(BloodPressureRecord::class),
HealthPermission.getReadPermission(HeartRateRecord::class),
HealthPermission.getWritePermission(HeartRateRecord::class),
HealthPermission.getReadPermission(BodyTemperatureRecord::class),
HealthPermission.getWritePermission(BodyTemperatureRecord::class)
)
getGrantedPermissions का इस्तेमाल करके देखें कि आपके ऐप्लिकेशन को ज़रूरी अनुमतियां पहले से मिली हुई हैं या नहीं. अगर ऐसा नहीं है, तो उन अनुमतियों का अनुरोध करने के लिए createRequestPermissionResultContract का इस्तेमाल करें. इससे Health Connect की अनुमतियों वाली स्क्रीन दिखती है.
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
उपयोगकर्ता किसी भी समय अनुमतियां दे सकते हैं या उन्हें रद्द कर सकते हैं. इसलिए, आपके ऐप्लिकेशन को हर बार अनुमतियों का इस्तेमाल करने से पहले, उनकी जांच करनी होगी. साथ ही, उन स्थितियों को मैनेज करना होगा जिनमें अनुमति नहीं दी गई है.
अनुमतियों का अनुरोध करने के लिए, checkPermissionsAndRun फ़ंक्शन को कॉल करें:
if (!granted.containsAll(PERMISSIONS)) {
requestPermissions.launch(PERMISSIONS)
// Check if required permissions are not granted, and return
}
// Permissions already granted; proceed with inserting or reading data
अगर आपको सिर्फ़ एक तरह के डेटा के लिए अनुमतियों का अनुरोध करना है, जैसे कि ब्लड प्रेशर, तो अनुमतियों के सेट में सिर्फ़ उस डेटा टाइप को शामिल करें:
ब्लड प्रेशर की जानकारी को ऐक्सेस करने के लिए, इन अनुमतियों का इस्तेमाल किया जाता है:
android.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
अपने ऐप्लिकेशन में ब्लड प्रेशर की जानकारी जोड़ने की सुविधा जोड़नी है, तो BloodPressureRecord डेटा टाइप के लिए, अनुमतियों का अनुरोध करें.
यहां उस अनुमति के बारे में बताया गया है जिसके बारे में आपको एलान करना होगा, ताकि ब्लड प्रेशर से जुड़े डेटा में बदलाव किया जा सके:
<application>
<uses-permission
android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />
...
</application>
ब्लड प्रेशर की जानकारी ऐक्सेस करने के लिए, आपको ये अनुमतियां मांगनी होंगी:
<application>
<uses-permission
android:name="android.permission.health.READ_BLOOD_PRESSURE" />
...
</application>
सेहत से जुड़ा डेटा सेव करने की अनुमति
इस सेक्शन में, Health Connect में वाइटल्स का डेटा सेव करने का तरीका बताया गया है. आम तौर पर, परफ़ॉर्मेंस की जानकारी का डेटा अलग-अलग रिकॉर्ड के तौर पर लिखा जाता है. अगर आपको एक साथ कई रिकॉर्ड लिखने हैं, जैसे कि सेंसर या बैकएंड से सिंक करना है, तो बैचिंग का इस्तेमाल करें.
BloodPressureRecord लिखने का उदाहरण:
suspend fun writeBloodPressureRecord(healthConnectClient: HealthConnectClient) { val record = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) healthConnectClient.insertRecords(listOf(record)) }
बैच में लिखना
अगर आपके ऐप्लिकेशन को कई डेटा पॉइंट लिखने हैं, जैसे कि कनेक्ट किए गए डिवाइस या बैकएंड सेवा से डेटा सिंक करना, तो आपको बैच राइट का इस्तेमाल करना चाहिए. इससे परफ़ॉर्मेंस बेहतर होती है और बैटरी की खपत कम होती है. Health Connect, एक बार में डेटा सेव करने के अनुरोध में 1,000 रिकॉर्ड तक प्रोसेस कर सकता है.
यहां दिए गए कोड में, एक साथ कई रिकॉर्ड बैच-राइट करने का तरीका बताया गया है:
suspend fun writeBatchRecords(healthConnectClient: HealthConnectClient) { val bloodPressureRecord = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) val heartRateRecord = HeartRateRecord( startTime = Instant.now().minusSeconds(60), startZoneOffset = ZoneOffset.UTC, endTime = Instant.now(), endZoneOffset = ZoneOffset.UTC, samples = listOf(HeartRateRecord.Sample(time = Instant.now().minusSeconds(30), beatsPerMinute = 80)) ) healthConnectClient.insertRecords(listOf(bloodPressureRecord, heartRateRecord)) }
सेहत से जुड़ा डेटा पढ़ने की अनुमति
ऐप्लिकेशन, सेहत से जुड़ा डेटा पढ़ सकते हैं. इससे वे मेज़रमेंट दिखा सकते हैं, रुझानों का विश्लेषण कर सकते हैं या डेटा को किसी बाहरी सर्वर के साथ सिंक कर सकते हैं. वाइटल पढ़ने के लिए, किसी खास रिकॉर्ड टाइप के साथ ReadRecordsRequest का इस्तेमाल करें. साथ ही, समयसीमा के हिसाब से फ़िल्टर करें.
BloodPressureRecord डेटा को पढ़ने का उदाहरण:
suspend fun readBloodPressureRecords( healthConnectClient: HealthConnectClient, startTime: Instant, endTime: Instant ) { val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = BloodPressureRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) for (record in response.records) { // Process each blood pressure record val systolic = record.systolic val diastolic = record.diastolic } }
अगर आपको शरीर के बारे में ज़रूरी जानकारी देने वाले डेटा को बैकएंड सर्वर के साथ सिंक करना है या Health Connect के साथ अपने ऐप्लिकेशन के डेटास्टोर को अप-टू-डेट रखना है, तो ChangeLogs का इस्तेमाल करें. इससे आपको किसी खास समय से लेकर अब तक, जोड़े गए, अपडेट किए गए या मिटाए गए रिकॉर्ड की सूची मिलती है. यह बदलावों को मैन्युअल तरीके से ट्रैक करने या बार-बार सभी डेटा को पढ़ने से ज़्यादा असरदार है. ज़्यादा जानकारी के लिए, Health Connect के साथ डेटा सिंक करना लेख पढ़ें.
सबसे सही तरीके
डेटा की विश्वसनीयता और उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, इन दिशा-निर्देशों का पालन करें:
- डेटा लिखने की फ़्रीक्वेंसी और बैचिंग: इनपुट/आउटपुट ओवरहेड को कम करने और बैटरी लाइफ़ को बनाए रखने के लिए, डेटा पॉइंट को एक ही
insertRecordsकॉल में ग्रुप करें. इसमें ज़्यादा से ज़्यादा 1,000 रिकॉर्ड के बैच होने चाहिए. हर पॉइंट को अलग-अलग लिखने के बजाय, ऐसा करें.- लाइव ट्रैकिंग: सेंसर से बार-बार अपडेट पाने के लिए (जैसे, लगातार ग्लूकोज़ मॉनिटर या दिल की धड़कन मॉनिटर), डेटा को 15 मिनट तक के अंतराल पर बैच में लिखें. इससे, बैटरी की खपत कम होने के साथ-साथ रीयल-टाइम में अपडेट भी मिलते रहेंगे.
- बैकग्राउंड सिंक:
WorkManagerका इस्तेमाल, बाद में किए जाने वाले राइट ऑपरेशन के लिए करें. जैसे, किसी कंपैनियन डिवाइस या बैकएंड सेवा से डेटा सिंक करना. बैच राइट के लिए, 15 मिनट का अंतराल रखें.
डुप्लीकेट डेटा लिखने से बचें: क्लाइंट आईडी का इस्तेमाल करें रिकॉर्ड बनाते समय,
metadata.clientRecordIdसेट करें. Health Connect इसका इस्तेमाल, यूनीक रिकॉर्ड की पहचान करने के लिए करता है. अगर आपने पहले से मौजूदclientRecordIdके साथ कोई रिकॉर्ड सेव करने की कोशिश की, तो Health Connect डुप्लीकेट रिकॉर्ड को अनदेखा कर देगा या नया रिकॉर्ड बनाने के बजाय, मौजूदा रिकॉर्ड को अपडेट कर देगा. सिंक करने की प्रोसेस को फिर से शुरू करने या ऐप्लिकेशन को फिर से इंस्टॉल करने के दौरान डुप्लीकेट आइटम बनने से रोकने के लिए,metadata.clientRecordIdसेट करना सबसे सही तरीका है.val record = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "bp_20240101_user123" ) )
मौजूदा डेटा की जांच करें: डेटा सिंक करने से पहले, Health Connect से सिंक करने की समयावधि के अंदर के रिकॉर्ड के बारे में क्वेरी करें. इससे यह पता चलेगा कि आपके ऐप्लिकेशन का डेटा पहले से मौजूद है या नहीं. इससे डुप्लीकेट डेटा से बचा जा सकेगा या नए डेटा को ओवरराइट होने से रोका जा सकेगा.
अनुमति मांगने की वजह साफ़ तौर पर बताएं:
Permission.createIntentफ़्लो का इस्तेमाल करके बताएं कि आपके ऐप्लिकेशन को स्वास्थ्य से जुड़े डेटा को ऐक्सेस करने की ज़रूरत क्यों है. जैसे, "आपके ब्लड प्रेशर के रुझानों को मॉनिटर करने और अहम जानकारी देने के लिए."टाइमस्टैंप को मेज़रमेंट के साथ अलाइन करें: पुष्टि करें कि रिकॉर्ड किए गए टाइमस्टैंप से यह पता चलता हो कि मेज़रमेंट कब लिए गए थे. इंटरवल डेटा, जैसे कि
HeartRateRecordके लिए, पुष्टि करें किstartTimeऔरendTimeसही हैं.
टेस्ट करना
डेटा की सटीकता और लोगों को बेहतर अनुभव देने के लिए, टेस्टिंग की इन रणनीतियों का पालन करें. साथ ही, टेस्ट के सबसे सामान्य इस्तेमाल के उदाहरण के आधिकारिक दस्तावेज़ देखें.
पुष्टि करने वाले टूल
- Health Connect टूलबॉक्स: इस कंपैनियन ऐप्लिकेशन का इस्तेमाल करके, रिकॉर्ड की मैन्युअल तरीके से जांच करें, टेस्ट डेटा मिटाएं, और डेटाबेस में बदलावों का सिम्युलेशन करें. यह पुष्टि करने का सबसे अच्छा तरीका है कि आपके रिकॉर्ड सही तरीके से सेव किए जा रहे हैं.
FakeHealthConnectClientकी मदद से यूनिट टेस्टिंग करना: टेस्टिंग लाइब्रेरी का इस्तेमाल करके यह पुष्टि करें कि आपका ऐप्लिकेशन, अनुमति रद्द होने या एपीआई से जुड़ी गड़बड़ियों जैसे मुश्किल मामलों को कैसे हैंडल करता है. इसके लिए, आपको किसी फ़िज़िकल डिवाइस की ज़रूरत नहीं होगी.
क्वालिटी चेकलिस्ट
सामान्य आर्किटेक्चर
सबसे ज़रूरी जानकारी को लागू करने में आम तौर पर ये शामिल होते हैं:
| कॉम्पोनेंट | मैनेज करता है |
|---|---|
| बीपी, धड़कन की दर वगैरह से जुड़े डेटा को कंट्रोल करने वाला ऐप्लिकेशन | सेंसर/इनपुट रीडिंग बैचिंग लॉजिक |
| रिपॉज़िटरी लेयर (Health Connect के ऑपरेशनों को रैप करती है:) | सेहत से जुड़े रिकॉर्ड डालें सेहत से जुड़े रिकॉर्ड पढ़ें |
| यूज़र इंटरफ़ेस (यूआई) लेयर (डिसप्ले): | लाइव रीडिंग पुराना डेटा चार्ट और रुझान |
समस्या का हल
| समस्या का ब्यौरा | संभावित वजह | रिज़ॉल्यूशन |
|---|---|---|
| डेटा टाइप मौजूद नहीं हैं (उदाहरण के लिए, ब्लड प्रेशर) | लिखने की अनुमतियां मौजूद नहीं हैं या समय के फ़िल्टर गलत हैं. | देखें कि आपने किसी खास तरह के डेटा को ऐक्सेस करने की अनुमति का अनुरोध किया हो और उपयोगकर्ता ने आपको वह अनुमति दी हो. पुष्टि करें कि आपके ReadRecordsRequest में ऐसा TimeRangeFilter इस्तेमाल किया गया हो जो मेज़रमेंट के समय को कवर करता हो. अनुमतियां देखें. |
| रिकॉर्ड सेव नहीं किए जा सके | यूनिट गलत हैं या वैल्यू मान्य सीमा से बाहर हैं. | Health Connect, रिकॉर्ड की वैल्यू की पुष्टि करता है. उदाहरण के लिए, ब्लड प्रेशर की वैल्यू, शरीर के हिसाब से सही रेंज में होनी चाहिए. मान्य रेंज और यूनिट के लिए, डेटा टाइप का दस्तावेज़ देखें. |
| डुप्लीकेट रिकॉर्ड दिखते हैं | clientRecordId एट्रिब्यूट की वैल्यू मौजूद नहीं है |
हर रिकॉर्ड के Metadata में एक यूनीक clientRecordId असाइन करें. इससे Health Connect को डुप्लीकेट डेटा हटाने में मदद मिलती है. ऐसा तब होता है, जब सिंक करने की कोशिश के दौरान एक ही डेटा को दो बार सेव किया जाता है. सबसे सही तरीके देखें. |
डीबग करने का सामान्य तरीका
- अनुमति की स्थिति की जांच करें: पढ़ने या लिखने की कार्रवाई करने से पहले, हमेशा
getPermissionStatus()को कॉल करें. उपयोगकर्ता, सिस्टम की सेटिंग में जाकर किसी भी समय अनुमतियां रद्द कर सकते हैं.