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 poucas ou nenhuma obstrução, a API Geospatial pode usar os dados de localização do GPS disponíveis para gerar posições 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 que a API ARCore for ativada, você poderá verificar a disponibilidade de VPS sem:
- Uma
ArSession
em execução (antes de chamarArSession_resume()
). - Como definir um
ArGeospatialMode
.
Verificar a disponibilidade do VPS no app
A API Geospatial pode ser usada em qualquer lugar em que o dispositivo possa determinar a própria localização. Se a sua experiência de RA depender da cobertura de VPS, use ArSession_checkVpsAvailabilityAsync()
para receber uma ArVpsAvailabilityFuture
, uma tarefa assíncrona que verifica a disponibilidade de VPS em uma determinada posição horizontal.
Depois de ter o ArVpsAvailabilityFuture
, é possível acessar o resultado por polling ou por um callback.
Consultar o resultado
Use ArFuture_getState()
para conferir o estado do ArFuture
. Há três estados diferentes:
AR_FUTURE_STATE_PENDING
: a operação ainda não foi concluída, então nenhum resultado é conhecido.AR_FUTURE_STATE_CANCELLED
: a operação foi cancelada porArFuture_cancel()
. Nenhum callback registrado será chamado.AR_FUTURE_STATE_DONE
: a operação foi concluída. UseArVpsAvailabilityFuture_getResult()
para ver o resultado.
Continue verificando ArFuture_getState()
até que a tarefa seja concluída.
// 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); }
Receber o resultado por um callback
Também é possível receber o resultado de uma ArFuture
por um callback. Use ArSession_checkVpsAvailabilityAsync()
e forneça um callback
. Essa callback
será chamada na linha de execução principal logo após a ArFuture
ter o estado AR_FUTURE_STATE_DONE
.
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); }
Cancelar o ArFuture
Use ArFuture_cancel()
para tentar cancelar o ArFuture
. Devido ao paralelismo de linhas de execução, é possível que sua tentativa de cancelamento não tenha sucesso.
ArFuture_cancel()
retorna 1
se a tentativa foi bem-sucedida e 0
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 pouca ou nenhuma obstrução suspensa, o GPS pode ser suficiente para gerar uma pose com alta precisão.
A seguir
- Consiga a pose geoespacial da câmera para determinar a localização exata do dispositivo do usuário no mundo real.