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 an jedem Ort verwendet werden, an dem das Gerät seinen Standort ermitteln kann:

  • In Gebieten mit geringer GPS-Genauigkeit, z. B. in Innenräumen und dichten städtischen Umgebungen, wird die API auf die VPS-Abdeckung angewiesen, um hochpräzise Posen zu generieren.
  • In Umgebungen im Freien mit wenig oder gar keinen Hindernissen kann die Geospatial API die verfügbaren GPS-Standortdaten verwenden, um raumbezogene Posen mit hoher Genauigkeit zu erstellen.

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 der Standort des Geräts ermittelt werden kann. Wenn die AR-Funktion von der VPS-Abdeckung abhängt, können Sie ArSession_checkVpsAvailabilityAsync() verwenden, um eine ArVpsAvailabilityFuture abzurufen. Dabei handelt es sich um eine asynchrone Aufgabe, die die VPS-Verfügbarkeit an einer bestimmten horizontalen Position prüft. Sobald Sie das ArVpsAvailabilityFuture haben, können Sie das Ergebnis durch Abfragen oder über einen Callback abrufen.

Ergebnis abfragen

Mit ArFuture_getState() können Sie den Status der ArFuture abrufen. Es gibt drei Status:

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

// 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);
}

Ergebnis über einen Callback abrufen

Sie können das Ergebnis eines ArFuture auch über einen Callback erhalten. Verwende ArSession_checkVpsAvailabilityAsync() und gib einen callback an. Diese callback wird im Hauptthread aufgerufen, kurz nachdem ArFuture den Status AR_FUTURE_STATE_DONE hat.

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 stornieren

Versuchen Sie mit ArFuture_cancel(), ArFuture zu stornieren. Aufgrund der Thread-Parallelität ist es möglich, dass Ihr Abbruchversuch nicht erfolgreich ist. ArFuture_cancel() gibt 1 zurück, wenn dieser Versuch erfolgreich war, andernfalls 0.

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