التحقّق من توفّر VPS في الموقع الحالي للجهاز

تستخدم واجهة برمجة التطبيقات الجغرافية المكانية مزيجًا من بيانات VPS وبيانات نظام تحديد المواقع العالمي (GPS) لإنشاء أوضاع جيوفضائية عالية الدقة. يمكن استخدام واجهة برمجة التطبيقات في أي مكان يتمكّن فيه الجهاز من تحديد موقعه الجغرافي:

  • وفي المناطق ذات الدقة المنخفضة لنظام تحديد المواقع العالمي (GPS)، مثل المساحات الداخلية والبيئات الحضرية الكثيفة، ستعتمد واجهة برمجة التطبيقات على تغطية VPS لإنشاء أوضاع عالية الدقة.
  • في البيئات الخارجية التي تتضمن عوائق قليلة أو لا تحتوي على أي عوائق علوية، قد تتمكن واجهة برمجة التطبيقات Geospatial API من استخدام بيانات الموقع الجغرافي المتوفرة لنظام تحديد المواقع العالمي (GPS) لإنشاء وضعيات جيوفضائية بدقة عالية.

يمكنك تحديد مدى توفّر VPS في موضع أفقي معيّن قبل بدء جلسة الواقع المعزّز واستخدامه لإنشاء تجارب أكثر تحديدًا، على سبيل المثال، عرض زر "Enter AR" (إدخال زر الواقع المعزّز) فقط عند توفُّر VPS.

تفعيل ARCore API

يجب أن يفعِّل تطبيقك ARCore API للتحقّق من مدى توفُّر VPS.

بعد تفعيل ARCore API، يمكنك التحقّق من مدى توفّر VPS بدون:

التحقّق من مدى توفّر VPS في تطبيقك

ويمكن استخدام واجهة برمجة التطبيقات الجغرافية المكانية في أي مكان يمكن للجهاز فيه تحديد موقعه. إذا كانت تجربة الواقع المعزّز تعتمد على تغطية VPS، يمكنك استخدام Session.checkVpsAvailabilityAsync() للحصول على VpsAvailabilityFuture، وهي مهمة غير متزامنة تتحقّق من مدى توفّر VPS في موضع أفقي معيّن. بعد الحصول على VpsAvailabilityFuture، يمكنك الحصول على نتيجته من خلال إجراء استطلاع رأي أو من خلال معاودة الاتصال.

استطلاع رأي النتيجة

يمكنك استخدام Future.getState() للحصول على حالة Future. هناك ثلاث حالات مختلفة:

  • PENDING: لم تكتمل العملية بعد، لذا لا توجد نتيجة معروفة.
  • CANCELLED: تم إلغاء العملية من قِبل Future.cancel(). لن يتم أبدًا الاتصال بأي معاودة اتصال مسجَّلة.
  • DONE: اكتملت العملية. استخدِم VpsAvailabilityFuture.getResult() للحصول على النتيجة.

يمكنك مواصلة التحقّق من Future.getState() إلى أن تكتمل المهمة.

Java

// Obtain a VpsAvailabilityFuture and store it somewhere.
VpsAvailabilityFuture future = session.checkVpsAvailabilityAsync(latitude, longitude, null);

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.getState() == FutureState.DONE) {
  switch (future.getResult()) {
    case AVAILABLE:
      // VPS is available at this location.
      break;
    case UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection error.
      break;

      // Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...
  }
}

Kotlin

// Obtain a VpsAvailabilityFuture and store it somewhere.
val future = session.checkVpsAvailabilityAsync(latitude, longitude, null)

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.state == FutureState.DONE) {
  when (future.result) {
    VpsAvailability.AVAILABLE -> {
      // VPS is available at this location.
    }
    VpsAvailability.UNAVAILABLE -> {
      // VPS is unavailable at this location.
    }
    VpsAvailability.ERROR_NETWORK_CONNECTION -> {
      // The external service could not be reached due to a network connection error.
    }
    else -> {
      TODO("Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...")
    }
  }
}

احصل على النتيجة من خلال معاودة الاتصال.

يمكنك أيضًا الحصول على نتيجة Future من خلال معاودة الاتصال. استخدِم Session.checkVpsAvailabilityAsync() وقدِّم callback. سيتم استدعاء callback في سلسلة التعليمات الرئيسية بعد وقت قصير من تغيير حالة Future إلى DONE.

Java

session.checkVpsAvailabilityAsync(
    latitude,
    longitude,
    result -> {
      // Callback is called on the Main thread.
      switch (result) {
          // Handle the VpsAvailability result as shown above.
          // For example, show UI that enables your AR view.
      }
    });

Kotlin

session.checkVpsAvailabilityAsync(latitude, longitude) { result ->
  // Callback is called on the Main thread.

  // Handle the VpsAvailability result as shown above.
  // For example, show UI that enables your AR view.
  TODO("Handle VpsAvailability " + result)
}

إلغاء Future

استخدِم Future.cancel() لمحاولة إلغاء Future. بسبب التوازي مع سلسلة المحادثات، قد لا تنجح محاولة الإلغاء التي تجريها. وتعرض Future.cancel() القيمة true إذا نجحت هذه المحاولة، وتعرض false خلاف ذلك.

استخدام واجهة برمجة التطبيقات Geospatial API بدون تغطية VPS

يمكن أيضًا استخدام واجهة برمجة التطبيقات Geospatial API في المناطق التي لا تتوفر بها تغطية VPS. في البيئات الخارجية التي لا تحتوي على حواجز علوية أو بدونها، قد يكون نظام تحديد المواقع العالمي (GPS) كافيًا لإنشاء وضعية بدقة عالية.

الخطوات التالية