Geospatial API از ترکیبی از داده های VPS و GPS برای ایجاد موقعیت های جغرافیایی با دقت بالا استفاده می کند. API را می توان در هر مکانی که دستگاه قادر به تعیین مکان خود باشد استفاده کرد:
- در مناطقی با دقت GPS پایین، مانند فضاهای داخلی و محیط های شهری متراکم، API برای ایجاد ژست های با دقت بالا به پوشش VPS متکی است.
- در محیطهای بیرونی با تعداد کم یا بدون انسداد بالای سر، Geospatial API ممکن است بتواند از دادههای موقعیت مکانی GPS موجود برای ایجاد موقعیتهای جغرافیایی با دقت بالا استفاده کند.
میتوانید قبل از شروع جلسه AR، در دسترس بودن VPS را در یک موقعیت افقی مشخص تعیین کنید و از آن برای ایجاد تجربیات خاصتر استفاده کنید - به عنوان مثال، برای ارائه دکمه "Enter AR" فقط زمانی که VPS در دسترس است.
ARCore API را فعال کنید
برنامه شما باید ARCore API را فعال کند تا در دسترس بودن VPS را بررسی کند.
هنگامی که ARCore API فعال شد، میتوانید در دسترس بودن VPS را بدون:
- جریانی که
ArSession
اجرا می کند (قبل از فراخوانیArSession_resume()
). - تنظیم یک
ArGeospatialMode
.
در دسترس بودن VPS را در برنامه خود بررسی کنید
Geospatial API را می توان در هر مکانی که دستگاه قادر به تعیین مکان خود باشد استفاده کرد. اگر تجربه AR شما وابسته به پوشش VPS است، می توانید از ArSession_checkVpsAvailabilityAsync()
برای به دست آوردن یک ArVpsAvailabilityFuture
استفاده کنید، یک کار ناهمزمان که در دسترس بودن VPS را در یک موقعیت افقی مشخص بررسی می کند. هنگامی که ArVpsAvailabilityFuture
را دارید، می توانید نتیجه آن را با نظرسنجی یا از طریق یک تماس پاسخ به دست آورید.
نتیجه را نظرسنجی کنید
از ArFuture_getState()
برای بدست آوردن حالت ArFuture
استفاده کنید. سه حالت مختلف وجود دارد:
-
AR_FUTURE_STATE_PENDING
: عملیات هنوز کامل نشده است، بنابراین هیچ نتیجه ای مشخص نیست. -
AR_FUTURE_STATE_CANCELLED
: این عملیات توسطArFuture_cancel()
لغو شده است. با هر پاسخ تماسی ثبت شده هرگز تماس گرفته نخواهد شد. -
AR_FUTURE_STATE_DONE
: عملیات کامل شده است. ازArVpsAvailabilityFuture_getResult()
برای به دست آوردن نتیجه استفاده کنید.
میتوانید بررسی ArFuture_getState()
را تا تکمیل کار ادامه دهید.
// Obtain a ArVpsAvailabilityFuture and store it somewhere. ArVpsAvailabilityFuture* future = NULL; CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude, NULL, NULL, &future) == AR_SUCCESS); // Poll ArVpsAvailabilityFuture later, for example, in a render loop. ArFutureState future_state = AR_FUTURE_STATE_PENDING; ArFuture_getState(ar_session, (ArFuture*)future, &future_state); if (future_state == AR_FUTURE_STATE_DONE) { ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN; ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability); switch (vps_availability) { case AR_VPS_AVAILABILITY_AVAILABLE: // VPS is available at this location. break; case AR_VPS_AVAILABILITY_UNAVAILABLE: // VPS is unavailable at this location. break; case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION: // The external service could not be reached due to a network connection // error. break; // Handle other error states, e.g. // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED, // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ... } ArFuture_release((ArFuture*)future); }
نتیجه را از طریق تماس برگشتی بدست آورید
شما همچنین می توانید نتیجه یک ArFuture
را از طریق یک callback بدست آورید. از ArSession_checkVpsAvailabilityAsync()
استفاده کنید و یک callback
پاسخ دهید. به زودی پس از اینکه ArFuture
حالت AR_FUTURE_STATE_DONE
را پیدا کرد، این callback
در رشته اصلی فراخوانی خواهد شد.
void vps_availability_callback(void* context, ArVpsAvailability availability) { // Callback is called on the Main thread. // Handle the ArVpsAvailability result as shown above. // For example, show UI that enables your AR view. // It is a best practice to free `context` memory at the end of the callback. free(context); } void check_availability_with_callback(ArSession* ar_session, double latitude, double longitude) { ArVpsAvailabilityFuture* future = NULL; void* context = NULL; CHECK(ArSession_checkVpsAvailabilityAsync( ar_session, latitude, longitude, context, vps_availability_callback, &future) == AR_SUCCESS); }
ArFuture
را لغو کنید
از ArFuture_cancel()
برای لغو ArFuture
استفاده کنید. به دلیل موازی بودن رشته، ممکن است تلاش برای لغو شما واقعاً موفق نباشد. اگر این تلاش موفقیت آمیز بود ArFuture_cancel()
1
و در غیر این صورت 0
را برمی گرداند.
از API Geospatial بدون پوشش VPS استفاده کنید
Geospatial API همچنین در مناطقی که پوشش VPS ندارند قابل استفاده است. در محیطهای بیرونی که موانع بالای سرشان کم است یا اصلاً وجود ندارد، GPS ممکن است برای ایجاد یک حالت با دقت بالا کافی باشد.