检查设备当前所在位置的 VPS 是否可用

Geospatial API 结合使用 VPS 和 GPS 数据来生成准确度高的地理空间转换。您可以在设备能够确定其位置的任何位置使用该 API:

  • 在 GPS 准确度较低的区域,例如室内空间和人口密集的城市环境中,该 API 将依靠 VPS 覆盖范围来生成准确度高的转换。
  • 在没有上空障碍物或无上空障碍物的户外环境中,Geospatial API 可以使用可用的 GPS 位置数据,生成准确度高的 Geospatial 转换。

您可以在 AR 会话启动之前确定 VPS 是否处于给定水平位置,并用它来打造更具体的体验,例如,仅在 VPS 可用时才显示“进入 AR”按钮。

启用 ARCore API

您的应用必须启用 ARCore API 以检查 VPS 可用性。

检查应用中的 VPS 可用性

Geospatial API 可以在设备能够确定其位置的任何位置使用。如果您的 AR 体验取决于 VPS 覆盖范围,您可以使用 GARSession#checkVPSAvailabilityAtCoordinate:completionHandler: 获取 GARVPSAvailabilityFuture,这是一个异步任务,用于检查给定水平位置的 VPS 可用性。 获得 GARVPSAvailabilityFuture 后,您可以通过轮询或回调来获取其结果。

调查结果

使用 GARFuture.state 获取 Future 的状态。共有三种状态:

  • GARFutureStatePending:操作尚未完成,因此无法了解任何结果。
  • GARFutureStateCancelled:操作已被 GARFuture#cancel 取消。任何已注册的回调都永远不会调用。
  • GARFutureStateDone:操作完成。使用 GARVPSAvailabilityFuture.result 获取结果。

您可以继续检查 GARFuture.state,直到任务完成为止。

通过回调获取结果

您还可以通过回调获取 Future 的结果。使用 GARSession#checkVPSAvailabilityAtCoordinate:completionHandler: 并提供 completionHandler。当 Future 的状态为 GARFutureStateDone 后,系统很快就会在主线程上调用此 completionHandler

取消Future

使用 GARFuture#cancel 尝试取消 Future。由于线程并行性,可能您的取消尝试实际上并未成功。 如果尝试成功,GARFuture#cancel 会返回 YES,否则会返回 NO

在没有 VPS 覆盖范围的情况下使用 Geospatial API

Geospatial API 也可以在没有 VPS 覆盖范围的区域使用。在没有上部障碍物或上部障碍物的户外环境中,GPS 可能足以生成非常准确的姿势。

后续步骤