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

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

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

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

‫Jetpack Compose for XR یک «ترکیب محلی» برای بررسی قابلیت‌های فضایی ایجاد می‌کند. از این برای بررسی فعال بودن واسط کاربر فضایی، صدای فضایی، محیط‌ها، گذر، یا محتوای سه‌بعدی استفاده کنید.

می‌توانید از 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 استفاده کنید تا نوع حالت ترکیبی مورد استفاده را بررسی کنید و درصورت نیاز تغییرات لازم را اعمال کنید.

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