בדיקת הזמינות של שרתי ה-VPS במיקום הנוכחי של המכשיר

ב-Geo-patial API נעשה שימוש בשילוב של נתוני VPS ו-GPS כדי ליצור מיקומים גיאו-מרחביים ברמת דיוק גבוהה. אפשר להשתמש ב-API בכל מקום שבו המכשיר יכול לקבוע את המיקום שלו:

  • באזורים שבהם רמת הדיוק של ה-GPS נמוכה, כמו אזורים סגורים וסביבות עירוניות צפופות, ה-API יסתמך על כיסוי VPS כדי ליצור תנוחות ברמת דיוק גבוהה.
  • בסביבות חוץ עם מעט או בלי חסימות מעל הראש, יכול להיות ש-Geospatial API יוכל להשתמש בנתוני המיקום הזמינים של ה-GPS כדי ליצור תנוחות גיאו-מרחביות ברמת דיוק גבוהה.

אתם יכולים לקבוע את הזמינות של ה-VPS במיקום אופקי נתון לפני תחילת סשן ה-AR, ולהשתמש בה כדי ליצור חוויות ספציפיות יותר – לדוגמה, להציג את הלחצן 'כניסה ל-AR' רק כשה-VPS זמין.

הפעלה של ARCore API

כדי לבדוק את הזמינות של VPS, צריך להפעיל את ARCore API באפליקציה.

אחרי שמפעילים את 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() עד שהמשימה תושלם.

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, ...")
    }
  }
}

קבלת התוצאה באמצעות קריאה חוזרת (callback)

אפשר גם לקבל את התוצאה של 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 אם לא.

שימוש ב-Geo-patial API ללא כיסוי VPS

אפשר להשתמש ב-Geospatial API גם באזורים ללא כיסוי של VPS. בסביבות שבהן יש מעט הפרעות מעל המצח או שאין בהן הפרעות מלמעלה, יכול להיות שה-GPS מספיק כדי ליצור תנוחה ברמת דיוק גבוהה.

המאמרים הבאים