মেটাডেটা সংক্রান্ত প্রয়োজনীয়তা

এই নির্দেশিকা Health Connect-এর 1.2.0-alpha05 ভার্সন ও পরবর্তী ভার্সনের সাথে মানানসই।

যেসব ডেভেলপার রিলিজ 1.1.0-alpha12 বা এর পরের যেকোনও ভার্সনে আপগ্রেড করেছেন, তাদের জন্য Health Connect-এ মেটাডেটা সংক্রান্ত পরিবর্তন করা হয়েছে।

লাইব্রেরি সংক্রান্ত তথ্য

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 ভার্সন থেকে দুটি মেটাডেটা পরিবর্তন করা হয়েছে। আপনার Record কনস্ট্রাক্টরে metadata অন্তর্ভুক্ত না থাকলে, আপনি কনস্ট্রাক্টর ইন্টার্নাল সংক্রান্ত সমস্যা দেখতে পেতে পারেন।

রেকর্ডিং পদ্ধতি নির্দিষ্ট করুন

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
)

অনন্য ডিভাইস শনাক্তকারী (UDI)

Android 17 (API লেভেল 37.1) বা U এক্সটেনশন 23 বা এর পরবর্তী যেকোনও ভার্সনে Health Connect-এর জন্য, Device ক্লাসে অনন্য ডিভাইস শনাক্তকারী (UDI)-এর জন্য সহায়তা অন্তর্ভুক্ত থাকে। আপনার লিখিত রেকর্ড সহ কোনও মেডিকেল ডিভাইসের রেজিস্টার করা UDI মডেলের বিস্তারিত তথ্য অ্যাসোসিয়েট করলে, ডাউনস্ট্রিম অ্যাপ্লিকেশন (যেমন টেলিহেলথ প্ল্যাটফর্ম বা ক্লিনিক্যাল পোর্টাল) ক্লিনিক্যাল-গ্রেড রিডিং শনাক্ত করতে এবং সেগুলিকে সাধারণ কনজিউমার-ওয়্যারেবল ডেটা থেকে আলাদা করতে পারে।

অনুমতি ঘোষণা করা

Health Connect-এ UDI বিবরণ লেখার জন্য, আপনার অ্যাপের AndroidManifest.xml ফাইলে আপনাকে অবশ্যই WRITE_DEVICE_UDI অনুমতি ঘোষণা করতে হবে:

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

মনে রাখবেন, WRITE_DEVICE_UDI হল একটি সাধারণ অনুমতি। আপনাকে এটি ম্যানিফেস্টে ঘোষণা করতে হবে, তবে রানটাইমে ব্যবহারকারীর থেকে এটি অনুরোধ করার প্রয়োজন নেই। ইনস্টল করার সময় এটি আপনার অ্যাপকে অটোমেটিক দেওয়া হয়।

শুধুমাত্র ডিভাইস শনাক্তকারী (DI) অংশটি লিখুন

সম্পূর্ণ UDI-তে দুটি অংশ থাকে:

  • ডিভাইস শনাক্তকারী (UDI-DI): ইস্যুকারী এজেন্সি (যেমন, GS1) দ্বারা কোনও নির্দিষ্ট ডিভাইস মডেলে অ্যাসাইন করা বিশ্বব্যাপী স্বীকৃত শনাক্তকারী।
  • প্রোডাকশন আইডেন্টিফায়ার (UDI-PI): ইউনিট-নির্দিষ্ট অ্যাট্রিবিউট, যেমন ক্রমিক সংখ্যা, ব্যাচ নম্বর, তৈরির তারিখ বা মেয়াদ শেষ হওয়ার তারিখ।

ব্যবহারকারীর গোপনীয়তা সুরক্ষিত রাখতে, Health Connect-এ কোডের শুধুমাত্র UDI-DI অংশটি পূরণ করুন। কোনও প্রোডাকশন আইডেন্টিফায়ার অ্যাট্রিবিউট (যেমন সিরিয়াল নম্বর বা ব্যাচ নম্বর) যোগ করবেন না।

কোডের উদাহরণ

মনে রাখবেন: Device ইনস্ট্যান্স তৈরি করার সময় আপনি UDI সেট করতে পারবেন।

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 অনুমতি ঘোষণা না করে UDI সহ ডেটা লেখেন, তাহলে Health Connect লেখার সময় একটি SecurityException দেখাবে।

ডিভাইস ক্লিয়ারেন্স যাচাই করতে UDI ব্যবহার করা

Health Connect একটি ট্রান্সপোর্ট লেয়ার হিসেবে কাজ করে এবং UDI-এর প্রামাণ্যতা বা রেজিস্ট্রেশন স্ট্যাটাস যাচাই করে না।

ডেটা রিডারদের জন্য, UDI-এর উপস্থিতি ইঙ্গিত করে যে ডেটা একটি রেজিস্টার করা মেডিকেল ডিভাইস থেকে আসে। ডিভাইস ক্লাসিফিকেশন, রেগুলেটরি ক্লিয়ারেন্স স্ট্যাটাস (যেমন, ক্লাস I, II বা III) বা নির্দিষ্ট উদ্দেশ্যমূলক ব্যবহার যাচাই করতে, রিডিং অ্যাপগুলিকে FDA-এর গ্লোবাল অনন্য ডিভাইস শনাক্তকরণ ডেটাবেস (GUDID) বা EU-এর EUDAMED-এর মতো রেগুলেটরি ডেটাবেস কোয়েরি করা উচিত।

স্নিপেট আপডেট করা হয়েছে

নতুন মেটাডেটা সংক্রান্ত প্রয়োজনীয়তা মেনে চলার জন্য যেখানেই নতুন স্নিপেট প্রয়োজন হয়েছে, 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 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. আপনার অ্যাপ যদি ডিভাইসের বর্ধিত ধরন লেখে, তাহলে ফিচার উপলভ্য নেই এমন ডিভাইসে অপ্রত্যাশিত TYPE_UNKNOWN এড়াতে FEATURE_EXTENTED_DEVICE_TYPES-এর পিছনে সেগুলি গেট করুন।