تستخدِم Geospatial API مجموعة من بيانات VPS وGPS لإنشاء أوضاع جيوفضائية عالية الدقة. يمكن استخدام واجهة برمجة التطبيقات في أي مكان يمكن للجهاز تحديد موقعه الجغرافي فيه:
- في المناطق التي تكون فيها دقة نظام تحديد المواقع العالمي (GPS) منخفضة، مثل المساحات الداخلية والبيئات الحضرية ذات الكثافة السكانية العالية، ستعتمد واجهة برمجة التطبيقات على تغطية VPS لإنشاء أوضاع ذات دقة عالية.
- في البيئات الخارجية التي تتضمّن عددًا قليلاً من العوائق العلوية أو لا تتضمّن أيّ منها، قد تتمكّن واجهة برمجة التطبيقات Geospatial API من استخدام بيانات الموقع الجغرافي المتاحة من نظام تحديد المواقع العالمي (GPS) لإنشاء أوضاع جيوفضائية بدقة عالية.
يمكنك تحديد مدى توفّر VPS في موضع أفقي معيّن قبل بدء جلسة الواقع المعزّز واستخدامه لإنشاء تجارب أكثر تحديدًا، على سبيل المثال، لعرض زر "بدء الواقع المعزّز" فقط عندما يكون VPS متاحًا.
تفعيل واجهة برمجة تطبيقات ARCore
يجب أن يفعّل تطبيقك واجهة برمجة التطبيقات ARCore API للتحقّق من توفّر VPS.
بعد تفعيل واجهة برمجة التطبيقات ARCore API، يمكنك التحقّق من توفّر VPS بدون:
- عملية حالية
Session
(قبل استدعاءSession.resume()
) - ضبط
GeospatialMode
التحقّق من توفّر الخادم الظاهري في تطبيقك
يمكن استخدام واجهة برمجة التطبيقات Geospatial API في أي مكان يمكن للجهاز تحديد موقعه الجغرافي فيه. إذا كانت تجربة الواقع المعزّز تعتمد على تغطية 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
في الحالات الأخرى.
استخدام واجهة برمجة التطبيقات Geospatial API بدون تغطية VPS
يمكن أيضًا استخدام واجهة برمجة التطبيقات Geospatial API في المناطق التي لا تتوفّر فيها تغطية VPS. في البيئات الخارجية التي تتضمّن عددًا قليلاً من العوائق العلوية أو لا تتضمّن أيّ منها، قد يكون نظام تحديد المواقع العالمي (GPS) كافيًا لإنشاء وضع بدقة عالية.
الخطوات التالية
- الحصول على وضع الجهاز الجغرافي المكاني من كاميرا الجهاز لتحديد الموقع الجغرافي الدقيق لجهاز المستخدم في العالم الحقيقي