الزامات فراداده

برای توسعه‌دهندگانی که به نسخه ۱.۱.۰-alpha۱۲ یا بالاتر ارتقا می‌یابند، تغییراتی در فراداده‌های Health Connect ایجاد شده است.

اطلاعات کتابخانه

شناسه‌ی آرتیفکت افزونه‌ی گرادل اندروید گوگل ماون، کتابخانه‌ی Health Connect را که باید به آن ارتقا دهید، مشخص می‌کند. این وابستگی SDK مربوط به Health Connect را به فایل build.gradle در سطح ماژول خود اضافه کنید:

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

تغییرات فراداده

دو تغییر در متادیتا از نسخه ۱.۱.۰-آلفا۱۲ به کیت توسعه نرم‌افزاری جت‌پک Health Connect اضافه شده است تا به تأیید وجود متادیتای مفید اضافی در اکوسیستم کمک کند.

روش ضبط را مشخص کنید

هر زمان که یک شیء از نوع 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,
)

نوع دستگاه

شما ملزم به مشخص کردن نوع دستگاه برای تمام داده‌های ضبط‌شده خودکار و فعال هستید. اگرچه می‌توان manufacturer و model نیز مشخص کرد، اما این موارد اختیاری هستند. برای جزئیات بیشتر، به کلاس Device در مستندات Jetpack مراجعه کنید. انواع دستگاه‌های فعلی عبارتند از:

نوع دستگاه توضیحات
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 نوع دستگاه، متر اندازه‌گیری است.
برای تعیین اینکه آیا دستگاه کاربر از Extended Device Types در 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
}
برای کسب اطلاعات بیشتر، به «بررسی در دسترس بودن ویژگی» مراجعه کنید.

در صورت امکان، علاوه بر نوع دستگاه، سازنده و مدل دستگاه را نیز ارائه دهید. برای مثال:

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

قطعه کدها به‌روزرسانی شدند

راهنماهای Health Connect در مواردی که برای رعایت الزامات جدید فراداده، به قطعه کدهای جدیدی نیاز بوده، به‌روزرسانی شده‌اند. برای مشاهده‌ی برخی از نمونه‌ها، به صفحه‌ی «نوشتن داده‌ها» مراجعه کنید.

روش‌های جدید فراداده

دیگر نمی‌توان متادیتا را مستقیماً نمونه‌سازی کرد، بنابراین از یکی از متدهای factory برای دریافت یک نمونه جدید از متادیتا استفاده کنید. متدهای factory تأیید می‌کنند که اطلاعات دستگاه هنگام استفاده از دستگاه یا حسگر برای ثبت داده‌ها ارائه شده است. برای داده‌های وارد شده دستی، ارائه اطلاعات دستگاه اختیاری است. هر تابع دارای سه نوع امضا است:

  • 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

برای اطلاعات بیشتر، به پروژه متن‌باز اندروید مراجعه کنید.

داده‌های آزمایش

از کتابخانه تست و 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. کتابخانه خود را به ۱.۱.۰-alpha12 ارتقا دهید.

  2. هنگام ساخت کتابخانه، خطاهای کامپایل در جایی که به متادیتای جدید نیاز است، رخ می‌دهند. برای رفع این خطاها و تکمیل مهاجرت، مطمئن شوید که تغییرات زیر را اعمال می‌کنید:

    • هنگام ساخت یک Record ، تعیین یک روش ضبط الزامی است. این کار با استفاده از یکی از متدهای کارخانه‌ای ارائه شده در Metadata ، مانند Metadata.manualEntry() یا Metadata.activelyRecorded(device = Device(...)) انجام می‌شود.
    • برای داده‌های ثبت‌شده توسط یک دستگاه، مشخص کردن نوع دستگاه، مانند Device.TYPE_WATCH یا Device.TYPE_PHONE الزامی است.
  3. اگر برنامه شما انواع دستگاه‌های توسعه‌یافته را می‌نویسد، آن‌ها را پشت FEATURE_EXTENTED_DEVICE_TYPES قرار دهید تا از TYPE_UNKNOWN غیرمنتظره در دستگاه‌هایی که این ویژگی در دسترس نیست، جلوگیری شود.