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

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

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

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

Google Maven Android gradle plugin का आर्टफ़ैक्ट आईडी, 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.manualEntry(),
    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
}
ज़्यादा जानने के लिए, सुविधा की उपलब्धता की जांच करना लेख पढ़ें.

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

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

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

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

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

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

मेटाडेटा से जुड़ी नई ज़रूरी शर्तों का पालन करने के लिए, 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 Open Source Project देखें.

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

मेटाडेटा की अनुमानित वैल्यू को मॉक करने के लिए, 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 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 से बचा जा सकेगा जिन पर यह सुविधा उपलब्ध नहीं है.