A API Geospatial usa uma combinação de dados de VPS e GPS para gerar poses geoespaciais de alta precisão. A API pode ser usada em qualquer lugar em que o dispositivo possa determinar a própria localização:
- Em áreas com baixa precisão do GPS, como espaços internos e ambientes urbanos densos, a API contará com a cobertura do VPS para gerar poses de alta precisão.
- Em ambientes externos com pouca ou nenhuma obstrução suspensa, a API Geospatial pode usar os dados de localização de GPS disponíveis para gerar poses geoespaciais com alta precisão.
Você pode determinar a disponibilidade do VPS em uma determinada posição horizontal antes do início da sessão de RA e usá-la para criar experiências mais específicas, por exemplo, para apresentar uma mensagem "Entrar na RA" somente quando o VPS estiver disponível.
Ativar a API ARCore
Seu app precisa ativar a API ARCore para verificar a disponibilidade do VPS.
Depois de ativar a API ARCore, você poderá verificar a disponibilidade do VPS sem:
- Uma
Session
em execução (antes de chamarSession.resume()
). - Como definir um
GeospatialMode
.
Verificar a disponibilidade de VPS no seu app
A API Geospatial pode ser usada em qualquer lugar em que o dispositivo consiga determinar a localização. Se a sua experiência de RA depender da cobertura de VPS, use Session.checkVpsAvailabilityAsync()
para receber uma VpsAvailabilityFuture
, uma tarefa assíncrona que verifica a disponibilidade de VPS em uma determinada posição horizontal.
Quando você tiver o VpsAvailabilityFuture
, poderá ver o resultado pesquisando ou usando um callback.
Pesquisar o resultado
Use Future.getState()
para saber o estado do Future
. Há três estados diferentes:
PENDING
: a operação ainda não foi concluída, então nenhum resultado é conhecido.CANCELLED
: a operação foi cancelada porFuture.cancel()
. Nenhum callback registrado será chamado.DONE
: a operação foi concluída. UseVpsAvailabilityFuture.getResult()
para ver o resultado.
Continue verificando Future.getState()
até que a tarefa seja concluída.
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, ...") } } }
Receber o resultado por um callback
Também é possível receber o resultado de uma Future
por um callback. Use Session.checkVpsAvailabilityAsync()
e forneça um callback
. Essa callback
será chamada na linha de execução principal logo após a Future
ter o estado 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) }
Cancelar o Future
Use Future.cancel()
para tentar cancelar o Future
. Devido ao paralelismo de linhas de execução, é possível que sua tentativa de cancelamento não dê certo.
Future.cancel()
retorna true
se a tentativa foi bem-sucedida e false
caso contrário.
Usar a API Geospatial sem cobertura de VPS
A API Geospatial também pode ser usada em áreas que não têm cobertura de VPS. Em ambientes externos com poucas ou nenhuma obstrução acima, o GPS pode ser suficiente para gerar uma pose com alta precisão.
A seguir
- Conseguir a pose geoespacial da câmera do dispositivo para determinar a localização exata do dispositivo do usuário no mundo real.