بررسی قابلیت‌های فضایی

دستگاه‌های XR واجدشرایط
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
هدست‌های واقعیت گسترده
عینک واقعیت گسترده سیمی

قابلیت‌های فضایی ممکن است در دستگاه‌های مختلف متفاوت باشد و با تعامل کاربران با برنامه یا سیستم شما تغییر کند. حتی خود برنامه شما هم می‌تواند آن‌ها را تغییر دهد—برای مثال، رفتن به «فضای خانه» یا «فضای کامل». برای جلوگیری از بروز مشکل، برنامه‌تان باید قابلیت‌های فضایی را بررسی کند تا مشخص شود کدام میاناهای برنامه‌سازی کاربردی در محیط فعلی پشتیبانی می‌شوند.

بررسی قابلیت‌های فضایی بااستفاده از Jetpack Compose برای واقعیت گسترده

‫Jetpack Compose ویژه واقعیت گسترده یک Composition Local برای بررسی قابلیت‌های فضایی ایجاد می‌کند. از این برای بررسی فعال بودن واسط کاربر فضایی، صدای فضایی، محیط‌ها، پخش مستقیم، یا محتوای سه‌بعدی استفاده کنید.

می‌توانید از LocalSpatialCapabilities.current استفاده کنید تا بررسی کنید آیا قابلیت‌های فضایی زیر درحال‌حاضر دردسترس هستند یا نه:

  • isSpatialUiEnabled: نشان می‌دهد که آیا برنامه می‌تواند عناصر میانای کاربر فضایی (برای مثال، SpatialPanel) ایجاد کند یا نه.
  • isContent3dEnabled: نشان می‌دهد که آیا برنامه می‌تواند اشیای سه‌بعدی ایجاد کند یا نه.
  • isAppEnvironmentEnabled: نشان می‌دهد که آیا برنامه می‌تواند محیط را تنظیم کند یا نه.
  • isPassthroughControlEnabled: نشان می‌دهد که آیا برنامه می‌تواند وضعیت عبور را کنترل کند یا نه.
  • isSpatialAudioEnabled: نشان می‌دهد که آیا برنامه می‌تواند از صدای فضایی استفاده کند یا نه.

مثال زیر نشان می‌دهد که چگونه می‌توان بررسی کرد که آیا واسط کاربر فضایی فعال است یا نه:

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

بررسی قابلیت‌های فضایی بااستفاده از SceneCore

هنگام استفاده از کتابخانه SceneCore، باید یک جلسه ایجاد کنید. پس‌از ایجاد جلسه، از spatialCapabilities از scene جلسه استفاده کنید تا بپرسید کدام قابلیت‌های فضایی درحال‌حاضر دردسترس هستند.

  • SPATIAL_3D_CONTENT: این فعالیت می‌تواند محتوای سه‌بعدی ایجاد کند.
  • APP_ENVIRONMENT: فعالیت می‌تواند محیط خودش را تنظیم کند.
  • EMBED_ACTIVITY: فعالیت می‌تواند فعالیت دیگری را به‌صورت فضایی جاسازی کند.
  • PASSTHROUGH_CONTROL: این فعالیت می‌تواند «دیدن محیط واقعی» را فعال یا غیرفعال کند.
  • SPATIAL_AUDIO: فعالیت می‌تواند از صدای فضایی استفاده کند.
  • SPATIAL_UI: فعالیت می‌تواند خودش را فضایی کند (برای مثال، با افزودن پانل فضایی).

همچنین می‌توانید انتخاب کنید که در یک فراخوانی برگشتی مشترک شوید، addSpatialCapabilitiesChangedListener که وقتی قابلیت‌های فضایی تغییر می‌کنند به شما اطلاع می‌دهد.

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.scene.spatialCapabilities.contains(
        SpatialCapability.PASSTHROUGH_CONTROL
    )
) {
    xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f
}
// Example 2: multiple capability flags can be checked simultaneously:
if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) &&
    xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)
) {
    // ...
}

استفاده از حالت ترکیب برای بررسی قابلیت‌های نمایشگر دستگاه

در Android XR، هدست‌های واقعیت گسترده و عینک‌های واقعیت گسترده سیمی قابلیت‌های سخت‌افزاری متفاوتی دارند، به‌ویژه ازنظر نوع نمایشگر. ممکن است لازم باشد رنگ‌های واسط کاربر برنامه و اشیای رندرشده را برای به‌حداکثر رساندن نمایان بودن تطبیق دهید، که ممکن است تحت تأثیر نوع نمایشگر و حالت ترکیب ترجیحی مورداستفاده دستگاه قرار گیرد. میانای برنامه‌سازی کاربردی DisplayBlendMode قابلیت حالت ترکیب دستگاه را برای رندر کردن ارائه می‌دهد. از این API برای تعیین نحوه افزودن محتوای مجازی به دنیای واقعی استفاده کنید.

در اینجا برخی‌از انواع حالت ترکیب که باید از آن‌ها مطلع باشید آورده شده است:

  • ADDITIVE: محتوای مجازی با افزودن مقادیر پیکسل برای هریک از مؤلفه‌های قرمز، سبز، و آبی به دنیای واقعی اضافه می‌شود. آلفا نادیده گرفته می‌شود، و پیکسل‌های سیاه شفاف به‌نظر می‌رسند.
  • ALPHA_BLEND: محتوای مجازی با ترکیب آلفا مقادیر پیکسل براساس مؤلفه آلفا به دنیای واقعی اضافه می‌شود.
  • NO_DISPLAY: ترکیب کردن در این دستگاه پشتیبانی نمی‌شود.

از XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() از کتابخانه Jetpack XR Runtime استفاده کنید تا بررسی کنید چه نوع حالت ترکیبی استفاده می‌شود و درصورت نیاز تنظیمات را انجام دهید.

همچنین مراجعه کنید به