Verfügbarkeit von VPS am aktuellen Standort des Geräts prüfen

Die Geospatial API verwendet eine Kombination aus VPS- und GPS-Daten, um hochpräzise geospatiale Posen zu generieren. Die API kann überall dort verwendet werden, wo das Gerät seinen Standort bestimmen kann:

  • In Gebieten mit geringer GPS-Genauigkeit, z. B. in Innenräumen und in dicht bebauten städtischen Umgebungen, nutzt die API die VPS-Abdeckung, um hochpräzise Posen zu generieren.
  • In Außenbereichen mit wenigen oder gar keinen Hindernissen kann die Geospatial API verfügbare GPS-Standortdaten verwenden, um raumbezogene Posen mit hoher Genauigkeit zu generieren.

Sie können die VPS-Verfügbarkeit an einer bestimmten horizontalen Position vor Beginn der AR-Sitzung ermitteln und sie verwenden, um spezifischere Funktionen zu erstellen. So können Sie beispielsweise die Schaltfläche „AR starten“ nur anzeigen, wenn VPS verfügbar ist.

ARCore API aktivieren

In Ihrer App muss die ARCore API aktiviert sein, um die VPS-Verfügbarkeit zu prüfen.

Sobald die ARCore API aktiviert ist, können Sie die VPS-Verfügbarkeit prüfen, ohne

Verfügbarkeit von VPS in Ihrer App prüfen

Die Geospatial API kann überall dort verwendet werden, wo das Gerät seinen Standort ermitteln kann. Wenn die AR-Funktion von der VPS-Abdeckung abhängt, können Sie Session.checkVpsAvailabilityAsync() verwenden, um eine VpsAvailabilityFuture abzurufen. Dabei handelt es sich um eine asynchrone Aufgabe, die die VPS-Verfügbarkeit an einer bestimmten horizontalen Position prüft. Sobald du die VpsAvailabilityFuture hast, kannst du das Ergebnis durch Abfragen oder über einen Rückruf abrufen.

Ergebnis abfragen

Mit Future.getState() können Sie den Status der Future abrufen. Es gibt drei verschiedene Status:

Sie können Future.getState() weiterhin prüfen, bis die Aufgabe abgeschlossen ist.

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

Ergebnis über einen Callback abrufen

Du kannst das Ergebnis einer Future auch über einen Callback abrufen. Verwende Session.checkVpsAvailabilityAsync() und gib einen callback an. Diese callback wird im Hauptthread aufgerufen, kurz nachdem Future den Status DONE hat.

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 stornieren

Verwenden Sie Future.cancel(), um zu versuchen, die Future abzubrechen. Aufgrund der Threadparallelität ist es möglich, dass der Abbruchversuch nicht erfolgreich ist. Future.cancel() gibt true zurück, wenn dieser Versuch erfolgreich war, andernfalls false.

Geospatial API ohne VPS-Abdeckung verwenden

Die Geospatial API kann auch in Gebieten verwendet werden, die nicht von VPS abgedeckt sind. In Außenumgebungen mit wenigen oder gar keinen Hindernissen über Kopf reicht das GPS möglicherweise aus, um eine Pose mit hoher Genauigkeit zu generieren.

Nächste Schritte