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

Die Geospatial API verwendet eine Kombination aus VPS- und GPS-Daten, um präzise raumbezogene Posen zu erstellen. Die API kann überall verwendet werden, wo das Gerät seinen Standort ermitteln kann:

  • In Gebieten mit geringer GPS-Genauigkeit, z. B. in Innenräumen und dicht bebauten Städten, setzt die API auf eine VPS-Abdeckung, um Positionen mit hoher Genauigkeit zu erzeugen.
  • In Umgebungen im Freien mit wenigen oder gar keinen Hindernissen über dem Kopf kann die Geospatial API die verfügbaren GPS-Standortdaten verwenden, um raumbezogene Posen mit hoher Genauigkeit zu erstellen.

Sie können die Verfügbarkeit von VPS an einer bestimmten horizontalen Position ermitteln, bevor die AR-Sitzung beginnt, und sie verwenden, um spezifischere Funktionen zu erstellen, z. B. um die Schaltfläche „AR aktivieren“ nur dann einzublenden, wenn VPS verfügbar ist.

ARCore API aktivieren

Ihre App muss die ARCore API aktivieren, um die Verfügbarkeit von VPS zu prüfen.

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

Verfügbarkeit von VPS in Ihrer App prüfen

Die Geospatial API kann überall verwendet werden, wo das Gerät seinen Standort ermitteln kann. Wenn Ihre AR-Nutzung von der VPS-Abdeckung abhängt, können Sie Session.checkVpsAvailabilityAsync() verwenden, um eine VpsAvailabilityFuture zu erhalten. Das ist eine asynchrone Aufgabe, die die VPS-Verfügbarkeit an einer bestimmten horizontalen Position prüft. Sobald Sie die VpsAvailabilityFuture haben, können Sie das Ergebnis durch Abfragen oder über einen Callback abrufen.

Ergebnis abfragen

Verwenden Sie Future.getState(), um den Status von Future abzurufen. Es gibt drei verschiedene Status:

Sie können die Suche in Future.getState() fortsetzen, 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

Sie können das Ergebnis eines Future auch über einen Callback abrufen. Verwenden Sie Session.checkVpsAvailabilityAsync() und geben Sie eine callback an. Diese callback wird im Main-Thread 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 abbrechen

Versuchen Sie mit Future.cancel(), Future abzubrechen. Aufgrund der Threadparallelität ist es möglich, dass Ihr 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 Regionen verwendet werden, in denen keine VPS-Abdeckung vorliegt. In Außenbereichen mit wenigen oder gar keinen Hindernissen über dem Kopf reicht das GPS unter Umständen aus, um eine Position mit hoher Genauigkeit zu erstellen.

Nächste Schritte