Para usar a API Geospatial no seu app, ele precisa estar configurado para acessar a API ARCore no Google Cloud. Essa API contém o Serviço de posicionamento visual, que fornece um posicionamento preciso usando dados do Google Street View.
Este guia ajuda você a configurar um projeto na nuvem do Google Cloud que tenha ativado a API e os métodos de autorização corretos para acessar a API.
Configurar um projeto na nuvem do Google ou usar um projeto atual
Se você já tiver um projeto do Google Cloud, selecione-o.
Se você não tiver um projeto, crie um.
Ativar a API ARCore
Para usar a API ARCore, é necessário ativá-la no seu projeto.
Configurar a autorização para o Google Cloud
Um app Android pode se comunicar com a API ARCore usando dois métodos de autorização diferentes: a autorização sem chave (OAuth 2.0), que é o método recomendado, e a autorização de chave de API:
- A autorização sem chave usa uma combinação do nome do pacote do aplicativo e da impressão digital da chave de assinatura para autorizar o aplicativo.
Uma chave de API é uma string que identifica um projeto na nuvem do Google Cloud. As chaves de API geralmente não são consideradas seguras, porque costumam ser acessíveis aos clientes. Considere usar a autorização sem chave para se comunicar com a API ARCore.
Autorização sem chave
Para autorizar seu app usando a autenticação sem chave, crie IDs do cliente OAuth 2.0.
No Google Cloud, acesse a página Credenciais.
Clique em Criar credenciais e selecione ID do cliente OAuth no menu.
Preencha os campos obrigatórios da seguinte maneira:
- Tipo de aplicativo: escolha Android.
- Nome do pacote: use o nome do pacote conforme declarado no
AndroidManifest.xml. - Impressão digital do certificado SHA-1: obtenha impressões digitais do certificado SHA-1 usando as instruções em Autenticação do cliente.
Pressione Criar.
Chave de API
Para criar uma chave de API no console do Google Cloud, siga estas etapas:
No console do Google Cloud, acesse a página Credenciais:
Clique em Criar credenciais e, em seguida, selecione a chave de API no menu.
Adicione uma restrição de API para a API ARCore. Para mais informações, consulte Aplicar restrições de chave de API.
Clique em Criar. A caixa de diálogo Chave de API criada mostra a string da chave recém-criada.
No Android Studio, adicione a nova chave de API ao seu projeto. Inclua a chave de API
em um elemento <meta-data> no elemento
<application> no
AndroidManifest.xml do app:
<meta-data
android:name="com.google.android.ar.API_KEY"
android:value="API_KEY"/>
Solicitar as permissões necessárias
Para usar a API Geospatial no ARCore com o Jetpack XR, seu app precisa solicitar as seguintes permissões de execução:
ACCESS_FINE_LOCATION: obrigatório para determinar o local exato de um usuário.
Em dispositivos móveis, a API Geospatial também requer as seguintes permissões:
android.permission.CAMERA: necessário para acessar a câmera do dispositivo.android.permission.INTERNET: necessário para se comunicar com os serviços do Google Cloud.
Acessar uma sessão
Acesse informações geoespaciais usando um ambiente de execução do Jetpack XR Session,
que seu app precisa criar.
Configurar a sessão
A API Geospatial não é ativada por padrão em sessões de XR. Seu app precisa
ativá-lo explicitamente configurando um GeospatialMode no Session. Os seguintes modos estão disponíveis:
GeospatialMode.SPATIAL: a API Geospatial está ativada. A API Geospatial usa dados do Sistema de Posicionamento Visual (VPS), do Sistema de Posicionamento Global (GPS) e dos sensores de movimento do dispositivo para determinar a pose geoespacial do dispositivo. Esse modo não está disponível em dispositivos de óculos inteligentes.GeospatialMode.INERTIAL: a API Geospatial está ativada no modo de baixo consumo. A API Geospatial usa apenas o GPS e os sensores de movimento do dispositivo para determinar a pose geoespacial do dispositivo. Esse modo está disponível apenas em dispositivos de óculos inteligentes.GeospatialMode.DISABLED: a API Geospatial está desativada. Ao fazer a transição de outro modo para esse, a API Geospatial libera todos os recursos adquiridos e interrompe o rastreamento.
Nem todos os dispositivos são compatíveis com todos os modos geoespaciais. Veja mais informações em GeospatialMode. Use
XrDevice.isGeospatialSupported para saber se um
determinado GeospatialMode é compatível.
O exemplo de código a seguir demonstra como definir um GeospatialMode usando
Session.configure.
// Define the configuration object to enable Geospatial features. val newConfig = Config.Builder(session.config) .setGeospatial(GeospatialMode.SPATIAL) .build() // Apply the configuration to the session. try { when (val configResult = session.configure(newConfig)) { is SessionConfigureSuccess -> { // The session is now configured to use the Geospatial API. } else -> { // Handle other configuration errors (e.g., missing library dependencies). } } } catch (e: UnsupportedOperationException) { // Handle configuration failure if the mode is not supported. }
Solicitar que o usuário permita o uso de dados do dispositivo
Os apps que usam a API Geospatial com o ARCore para Jetpack XR precisam apresentar ao usuário uma solicitação para confirmar e permitir o uso de dados do dispositivo. Consulte as normas de privacidade do usuário para mais informações.
Usar o objeto geoespacial
Depois que a sessão for configurada, use Geospatial.getInstance para receber o objeto Geospatial. Use o objeto
Geospatial somente quando o estado dele for
GeospatialTrackingState.RUNNING.
Os exemplos de código a seguir mostram como monitorar o estado geoespacial usando
Geospatial.state.
Compose XR
val geospatial = remember { Geospatial.getInstance(session) } val geospatialState by geospatial.state.collectAsStateWithLifecycle() if (geospatialState.geospatialTrackingState == Geospatial.GeospatialTrackingState.RUNNING) { // Queries to the Geospatial API are only valid when the state is RUNNING. }
SceneCore
val geospatial = Geospatial.getInstance(session) lifecycleScope.launch { geospatial.state.collect { geospatialState -> if (geospatialState == Geospatial.GeospatialTrackingState.RUNNING) { // Queries to the Geospatial API are only valid when the state is RUNNING. } } }
Entender os valores de precisão
Quando a API Geospatial está ativada, ela fornece três valores de precisão: horizontal, vertical e de orientação. Esses valores de precisão são atualizados ao longo do tempo e podem ser mais precisos à medida que mais dados são adquiridos. Valores maiores indicam menor precisão e são definidos como o raio de um nível de confiança de 68%. Em outras palavras, há uma probabilidade de 68% de que o valor verdadeiro esteja dentro do raio fornecido do valor estimado.
Use
Geospatial.State.horizontalAccuracy,
verticalAccuracy e
orientationYawAccuracy para saber os
valores de precisão atuais.
Seu app pode exigir um nível específico de precisão para funcionar corretamente. Por
exemplo, seu app pode esperar até que a precisão horizontal seja menor que 5
metros antes de renderizar o conteúdo virtual. Para aumentar a probabilidade de obter dados de maior precisão, seu app precisa instruir os usuários a olhar ao redor, de preferência para edifícios ou outros elementos com muitos detalhes visuais que estejam presentes no Google Street View. Use
Geospatial.checkVpsAvailability para
determinar se o VPS está disponível no local especificado.
A seguir
Quando a API Geospatial está configurada corretamente no app, ele pode fazer o seguinte:
- Converter entre poses locais do dispositivo e poses geoespaciais.
- Renderizar conteúdo em poses geoespaciais