در دسترس بودن VPS را در مکان فعلی دستگاه بررسی کنید

Geospatial API از ترکیبی از داده های VPS و GPS برای ایجاد موقعیت های جغرافیایی با دقت بالا استفاده می کند. API را می توان در هر مکانی که دستگاه قادر به تعیین مکان خود باشد استفاده کرد:

  • در مناطقی با دقت GPS پایین، مانند فضاهای داخلی و محیط های شهری متراکم، API برای ایجاد ژست های با دقت بالا به پوشش VPS متکی است.
  • در محیط‌های بیرونی با تعداد کم یا بدون انسداد بالای سر، Geospatial API ممکن است بتواند از داده‌های موقعیت مکانی GPS موجود برای ایجاد موقعیت‌های جغرافیایی با دقت بالا استفاده کند.

می‌توانید قبل از شروع جلسه AR، در دسترس بودن VPS را در یک موقعیت افقی مشخص تعیین کنید و از آن برای ایجاد تجربیات خاص‌تر استفاده کنید - به عنوان مثال، برای ارائه دکمه "Enter AR" فقط زمانی که VPS در دسترس است.

ARCore API را فعال کنید

برنامه شما باید ARCore API را فعال کند تا در دسترس بودن VPS را بررسی کند.

هنگامی که ARCore API فعال شد، می‌توانید در دسترس بودن VPS را بدون:

در دسترس بودن VPS را در برنامه خود بررسی کنید

Geospatial API را می توان در هر مکانی که دستگاه قادر به تعیین مکان خود باشد استفاده کرد. اگر تجربه AR شما وابسته به پوشش VPS است، می توانید از Session.checkVpsAvailabilityAsync() برای به دست آوردن VpsAvailabilityFuture استفاده کنید، یک کار ناهمزمان که در دسترس بودن VPS را در یک موقعیت افقی مشخص بررسی می کند. هنگامی که VpsAvailabilityFuture دارید، می توانید نتیجه آن را با نظرسنجی یا از طریق یک تماس پاسخ به دست آورید.

نتیجه را نظرسنجی کنید

از Future.getState() برای بدست آوردن حالت Future استفاده کنید. سه حالت مختلف وجود دارد:

  • PENDING : عملیات هنوز کامل نشده است، بنابراین هیچ نتیجه ای مشخص نیست.
  • CANCELLED : عملیات توسط Future.cancel() لغو شده است. با هر پاسخ تماسی ثبت شده هرگز تماس گرفته نخواهد شد.
  • DONE : عملیات کامل شد. از VpsAvailabilityFuture.getResult() برای به دست آوردن نتیجه استفاده کنید.

می‌توانید به بررسی Future.getState() تا تکمیل کار ادامه دهید.

جاوا

// 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, ...
  }
}

کاتلین

// 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 به زودی پس از DONE وضعیت Future در موضوع اصلی فراخوانی می شود.

جاوا

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.
      }
    });

کاتلین

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 برمی گرداند.

از API Geospatial بدون پوشش VPS استفاده کنید

Geospatial API همچنین در مناطقی که پوشش VPS ندارند قابل استفاده است. در محیط‌های بیرونی که موانع بالای سرشان کم است یا اصلاً وجود ندارد، GPS ممکن است برای ایجاد یک حالت با دقت بالا کافی باشد.

بعدش چی