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

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

التحقّق من الإمكانات المكانية باستخدام 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، عليك إنشاء جلسة. بعد إنشاء الجلسة، استخدِم الدالة getSpatialCapabilities في الجلسة للاستعلام عن ميزات المعالجة المكانية المتوفّرة حاليًا.

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

val xrSession = Session.create(this)

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

// Example 3: Create a spatialized panel if/when spatialization UI becomes available
xrSession.addSpatialCapabilitiesChangedListener((capabilities) -> {
  if (capabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)){
Subspace{
   SpatialPanel(...)
      }
   }
});

انظر أيضًا