التحقّق من الإمكانات المكانية

يمكن أن تتغيّر الإمكانات المكانية عندما يتفاعل المستخدمون مع تطبيقك أو النظام، أو يمكن أن يغيّرها تطبيقك نفسه، على سبيل المثال، الانتقال إلى "المساحة الرئيسية" أو "المساحة الكاملة". لتجنُّب حدوث مشاكل، يجب أن يتحقّق تطبيقك من الإمكانات المكانية لتحديد واجهات برمجة التطبيقات المتوافقة مع البيئة الحالية.

التحقّق من الإمكانات المكانية باستخدام 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 في الجلسة للاستعلام عن الإمكانات المكانية المتاحة حاليًا.

يمكنك أيضًا الاشتراك في خدمة تلقّي مكالمة تلقائية، addSpatialCapabilitiesChangedListener لإعلامك عند تغيُّر ميزات المعالجة العمودية.

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
    )
) {
    xrSession.scene.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: multiple capability flags can be checked simultaneously:
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
            SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT
    )
) {
    // ...
}

انظر أيضًا