मेटाडेटा से जुड़ी ज़रूरी शर्तें

यह गाइड, Health Connect के 1.2.0-alpha05 और इसके बाद के वर्शन के साथ काम करती है.

Health Connect के मेटाडेटा में कुछ बदलाव किए गए हैं. ये बदलाव उन डेवलपर के लिए हैं जिन्होंने 1.1.0-alpha12 या इसके बाद के वर्शन पर अपग्रेड किया है.

लाइब्रेरी की जानकारी

Google Maven Android gradle प्लगिन का आर्टफ़ैक्ट आईडी, उस Health Connect लाइब्रेरी की पहचान करता है जिसे आपको अपग्रेड करना होगा. अपने मॉड्यूल-लेवल की build.gradle फ़ाइल में, Health Connect SDK की यह डिपेंडेंसी जोड़ें:

dependencies {
  implementation "androidx.health.connect:connect-client:1.1.0-alpha12"
}

मेटाडेटा में बदलाव

Health Connect Jetpack SDK के वर्शन 1.1.0-alpha12 में, मेटाडेटा से जुड़े दो बदलाव किए गए हैं. इससे यह पुष्टि करने में मदद मिलेगी कि इकोसिस्टम में काम का अतिरिक्त मेटाडेटा मौजूद है. अगर metadata को आपके Record कंस्ट्रक्टर में शामिल नहीं किया गया है, तो आपको कंस्ट्रक्टर इंटरनल गड़बड़ी दिख सकती है.

रिकॉर्डिंग का तरीका बताएं

जब भी कोई Record() टाइप ऑब्जेक्ट इंस्टैंशिएट किया जाता है, तब आपको मेटाडेटा की जानकारी देनी होगी.

Health Connect में डेटा सेव करते समय, आपको रिकॉर्डिंग के चार तरीकों में से किसी एक को चुनना होगा. इसके लिए, आपको Metadata को इंस्टैंशिएट करने के लिए, इससे जुड़े फ़ैक्ट्री मेथड में से किसी एक का इस्तेमाल करना होगा:

रिकॉर्ड करने का तरीका ब्यौरा
RECORDING_METHOD_UNKNOWN रिकॉर्डिंग के तरीके की पुष्टि नहीं की जा सकती.
RECORDING_METHOD_MANUAL_ENTRY उपयोगकर्ता ने डेटा डाला है.
RECORDING_METHOD_AUTOMATICALLY_RECORDED किसी डिवाइस या सेंसर ने डेटा रिकॉर्ड किया हो.
RECORDING_METHOD_ACTIVELY_RECORDED उपयोगकर्ता ने किसी डिवाइस पर रिकॉर्डिंग सेशन शुरू या खत्म किया.

उदाहरण के लिए:

 StepsRecord(
    startTime = Instant.ofEpochMilli(1234L),
    startZoneOffset = null,
    endTime = Instant.ofEpochMilli(1236L),
    endZoneOffset = null,
    metadata = Metadata.activelyRecorded(device = Device(type = Device.TYPE_WATCH)),
    count = 10
)

डिवाइस का टाइप

अपने-आप और ऐक्टिव तरीके से रिकॉर्ड किए गए सभी डेटा के लिए, आपको डिवाइस का टाइप बताना होगा. ज़्यादा जानकारी के लिए, Jetpack के दस्तावेज़ में Device क्लास देखें. फ़िलहाल, डिवाइस के इन टाइप के लिए यह सुविधा उपलब्ध है:

डिवाइस का टाइप ब्यौरा
TYPE_UNKNOWN डिवाइस के टाइप की जानकारी नहीं है.
TYPE_WATCH डिवाइस का टाइप स्मार्टवॉच है.
TYPE_PHONE डिवाइस का टाइप फ़ोन है.
TYPE_SCALE डिवाइस का टाइप स्केल है.
TYPE_RING डिवाइस का टाइप रिंग है.
TYPE_HEAD_MOUNTED डिवाइस, सिर पर पहने जाने वाला डिवाइस है.
TYPE_FITNESS_BAND डिवाइस का टाइप फ़िटनेस बैंड है.
TYPE_CHEST_STRAP डिवाइस का टाइप चेस्ट स्ट्रैप है.
TYPE_SMART_DISPLAY डिवाइस का टाइप स्मार्ट डिसप्ले है.

Device.type की कुछ वैल्यू, Health Connect के नए वर्शन पर ही उपलब्ध हैं. डिवाइस टाइप की ज़्यादा जानकारी देने वाली सुविधा उपलब्ध न होने पर, इन टाइप को Device.TYPE_UNKNOWN के तौर पर माना जाता है.

डिवाइस के टाइप की ज़्यादा जानकारी ब्यौरा
TYPE_CONSUMER_MEDICAL_DEVICE डिवाइस का टाइप मेडिकल डिवाइस है.
TYPE_GLASSES डिवाइस टाइप, स्मार्ट ग्लास या आईवियर का जोड़ा है.
TYPE_HEARABLE डिवाइस का टाइप, सुनने में मदद करने वाला डिवाइस है.
TYPE_FITNESS_MACHINE डिवाइस का टाइप, स्टेशनरी मशीन है.
TYPE_FITNESS_EQUIPMENT डिवाइस का टाइप फ़िटनेस का सामान है.
TYPE_PORTABLE_COMPUTER डिवाइस का टाइप पोर्टेबल कंप्यूटर है.
TYPE_METER डिवाइस टाइप, मेज़रमेंट मीटर है.
यह पता लगाने के लिए कि उपयोगकर्ता के डिवाइस पर Health Connect के एक्सटेंडेड डिवाइस टाइप काम करते हैं या नहीं, क्लाइंट ऐप्लिकेशन पर FEATURE_EXTENDED_DEVICE_TYPES की उपलब्धता देखें:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_EXTENDED_DEVICE_TYPES
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}
ज़्यादा जानने के लिए, सुविधा की उपलब्धता की जांच करना लेख पढ़ें.

उदाहरण के लिए:

 val WATCH_DEVICE = Device(
    manufacturer = "Google",
    model = "Pixel Watch",
    type = Device.TYPE_WATCH
)

// Phone
 val PHONE_DEVICE = Device(
    manufacturer = "Google",
    model = "Pixel 8",
    type = Device.TYPE_PHONE
)

// Ring
 val RING_DEVICE = Device(
    manufacturer = "Oura",
    model = "Ring Gen3",
    type = Device.TYPE_RING
)

// Scale
 val SCALE_DEVICE = Device(
    manufacturer = "Withings",
    model = "Body Comp",
    type = Device.TYPE_SCALE
)

यूनीक डिवाइस आइडेंटिफ़ायर (यूडीआई)

Android 17 (एपीआई लेवल 37.1) या U एक्सटेंशन 23 या इसके बाद के वर्शन पर Health Connect के लिए, Device क्लास में यूनीक डिवाइस आइडेंटिफ़ायर (यूडीआई) के लिए सहायता शामिल है. मेडिकल डिवाइस के रजिस्टर किए गए यूडीआई मॉडल की जानकारी को अपने लिखित रिकॉर्ड से जोड़ने पर, डाउनस्ट्रीम ऐप्लिकेशन (जैसे कि टेलीहेल्थ प्लैटफ़ॉर्म या क्लीनिकल पोर्टल) को क्लीनिकल ग्रेड की रीडिंग की पहचान करने और उन्हें सामान्य उपभोक्ता-पहनने योग्य डिवाइस के डेटा से अलग करने की अनुमति मिलती है.

अनुमति के बारे में जानकारी देना

Health Connect में यूडीआई की जानकारी सेव करने के लिए, आपको अपने ऐप्लिकेशन की AndroidManifest.xml फ़ाइल में WRITE_DEVICE_UDI अनुमति का एलान करना होगा:

<uses-permission android:name="android.permission.health.WRITE_DEVICE_UDI" />

ध्यान दें कि WRITE_DEVICE_UDI एक सामान्य अनुमति है. आपको इसे अपने मेनिफ़ेस्ट में ज़ाहिर करना होगा. हालांकि, आपको रनटाइम के दौरान उपयोगकर्ता से इसके लिए अनुरोध करने की ज़रूरत नहीं है. यह अनुमति, ऐप्लिकेशन इंस्टॉल करते समय अपने-आप मिल जाती है.

सिर्फ़ डिवाइस आइडेंटिफ़ायर (डीआई) वाला हिस्सा लिखें

पूरे यूडीआई में दो हिस्से होते हैं:

  • डिवाइस आइडेंटिफ़ायर (यूडीआई-डीआई): यह एक ऐसा आइडेंटिफ़ायर होता है जिसे दुनिया भर में मान्यता मिली होती है. इसे जारी करने वाली एजेंसी (उदाहरण के लिए, GS1) किसी खास डिवाइस मॉडल को असाइन करती है.
  • प्रोडक्शन आइडेंटिफ़ायर (यूडीआई-पीआई): यूनिट के हिसाब से एट्रिब्यूट, जैसे कि सीरियल नंबर, बैच नंबर, मैन्युफ़ैक्चरिंग की तारीखें या एक्सपायर होने की तारीखें.

उपयोगकर्ता की निजता को सुरक्षित रखने के लिए, Health Connect में कोड का सिर्फ़ UDI-DI वाला हिस्सा भरें. इसमें प्रोडक्शन आइडेंटिफ़ायर एट्रिब्यूट (जैसे, सीरियल नंबर या बैच नंबर) शामिल न करें.

कोड का उदाहरण

ध्यान दें: Device इंस्टेंस बनाते समय, यूडीआई सेट किया जा सकता है.

Jetpack SDK

val device = Device(
    type = Device.TYPE_CONSUMER_MEDICAL_DEVICE,
    manufacturer = "Omron",
    model = "HEM-7121",
    udi = "04015674011832" // Device Identifier (UDI-DI) portion only
)

Platform API

val device = Device.Builder()
    .setType(Device.DEVICE_TYPE_CONSUMER_MEDICAL_DEVICE)
    .setManufacturer("Omron")
    .setModel("HEM-7121")
    .setUdi("04015674011832") // Device Identifier (UDI-DI) portion only
    .build()

अगर आपने WRITE_DEVICE_UDI अनुमति के बारे में बताए बिना यूडीआई का इस्तेमाल करके डेटा सेव किया है, तो Health Connect डेटा सेव करते समय SecurityException दिखाएगा.

डिवाइस को साफ़ करने की पुष्टि करने के लिए, यूडीआई का इस्तेमाल करना

Health Connect, ट्रांसपोर्ट लेयर के तौर पर काम करता है. यह यूडीआई की पुष्टि नहीं करता. साथ ही, यह भी पुष्टि नहीं करता कि यूडीआई रजिस्टर है या नहीं.

डेटा रीडर के लिए, यूडीआई की मौजूदगी से पता चलता है कि डेटा, रजिस्टर किए गए किसी मेडिकल डिवाइस से मिला है. पढ़ने की सुविधा देने वाले ऐप्लिकेशन को, कानूनी डेटाबेस से क्वेरी करनी चाहिए. जैसे, एफ़डीए का ग्लोबल यूनीक डिवाइस आइडेंटिफ़िकेशन डेटाबेस (जीयूडीआईडी) या ईयू का EUDAMED. इससे डिवाइस के क्लासिफ़िकेशन, कानूनी अनुमति की स्थिति (उदाहरण के लिए, क्लास I, II या III) या इस्तेमाल के खास मकसद की पुष्टि की जा सकती है.

स्निपेट अपडेट किए गए

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

मेटाडेटा के नए तरीके

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

  • activelyRecorded

    • fun activelyRecorded(device: Device): Metadata.
    • fun activelyRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun activelyRecordedWithId(id: String, device: Device): Metadata
  • autoRecorded

    • fun autoRecorded(device: Device): Metadata
    • fun autoRecorded(clientRecordId: String, clientRecordVersion: Long = 0, device: Device): Metadata
    • fun autoRecordedWithId(id: String, device: Device): Metadata
  • manualEntry

    • fun manualEntry(device: Device? = null): Metadata
    • fun manualEntry(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun manualEntryWithId(id: String, device: Device? = null): Metadata
  • unknownRecordingMethod

    • fun unknownRecordingMethod(device: Device? = null): Metadata
    • fun unknownRecordingMethod(clientRecordId: String, clientRecordVersion: Long = 0, device: Device? = null): Metadata
    • fun unknownRecordingMethodWithId(id: String, device: Device? = null): Metadata

ज़्यादा जानकारी के लिए, Android ओपन सोर्स प्रोजेक्ट देखें.

टेस्टिंग डेटा

मेटाडेटा की अनुमानित वैल्यू को मॉक करने के लिए, Testing Library और MetadataTestHelper का इस्तेमाल करें:

private val TEST_METADATA =
    Metadata.unknownRecordingMethod(
        clientRecordId = "clientId",
        clientRecordVersion = 1L,
        device = Device(type = Device.TYPE_UNKNOWN),
    ).populatedWithTestValues(id = "test")

इससे Health Connect के लागू होने का तरीका पता चलता है. Health Connect, रिकॉर्ड डालने के दौरान इन वैल्यू को अपने-आप भर देता है.

टेस्टिंग लाइब्रेरी के लिए, आपको Health Connect SDK टूल की इस डिपेंडेंसी को अपने मॉड्यूल-लेवल की build.gradle फ़ाइल में जोड़ना होगा:

dependencies {
  testImplementation "androidx.health.connect:connect-testing:1.0.0-alpha02"
}

लाइब्रेरी अपग्रेड करना

आपको ये मुख्य चरण पूरे करने होंगे:

  1. अपनी लाइब्रेरी को 1.1.0-alpha12 पर अपग्रेड करें.

  2. लाइब्रेरी बनाते समय, जहां नए मेटाडेटा की ज़रूरत होगी वहां कंपाइल करने से जुड़ी गड़बड़ियां दिखेंगी. इन गड़बड़ियों को ठीक करने और माइग्रेशन पूरा करने के लिए, पक्का करें कि आपने ये बदलाव किए हों:

    • Record बनाते समय, रिकॉर्डिंग का तरीका बताना ज़रूरी है. इसके लिए, Metadata में दिए गए फ़ैक्ट्री के किसी एक तरीके का इस्तेमाल किया जाता है. जैसे, Metadata.manualEntry() या Metadata.activelyRecorded(device = Device(...)).
    • किसी डिवाइस से रिकॉर्ड किए गए डेटा के लिए, डिवाइस का टाइप बताना ज़रूरी है. जैसे, Device.TYPE_WATCH या Device.TYPE_PHONE.
  3. अगर आपका ऐप्लिकेशन, डिवाइस के टाइप की ज़्यादा जानकारी लिखता है, तो उसे FEATURE_EXTENTED_DEVICE_TYPES के पीछे गेट करें, ताकि उन डिवाइसों पर अनचाहे TYPE_UNKNOWN से बचा जा सके जहां यह सुविधा उपलब्ध नहीं है.