Começar a criar experiências imersivas

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Headsets XR
Óculos XR com fio

Depois de instalar e configurar o Android Studio, criar um projeto e configurar o SDK do Jetpack para XR, você vai poder começar a criar experiências imersivas para dispositivos como headsets XR e óculos XR com fio.

Antes de começar a explorar todas as maneiras de criar, leia as informações e conclua as tarefas nas seções a seguir para garantir que o app esteja configurado para o desenvolvimento de XR imersiva.

Configurar o arquivo de manifesto do app

Assim como em outros projetos de apps Android, seu app Android XR precisa ter um arquivo AndroidManifest.xml com configurações de manifesto específicas. O arquivo de manifesto descreve informações essenciais sobre o app para as ferramentas de build do Android, para o sistema operacional Android e para o Google Play. Consulte o guia de visão geral do manifesto do app para mais informações.

Para apps diferenciados de XR, o arquivo de manifesto precisa conter os seguintes elementos e atributos:

Propriedade PROPERTY_XR_ACTIVITY_START_MODE

A propriedade android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" permite que o sistema saiba que uma atividade precisa ser iniciada em um modo específico quando ela é iniciada.

Essa propriedade tem os seguintes valores:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (somente SDK do Jetpack XR)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (somente SDK do Jetpack XR)

XR_ACTIVITY_START_MODE_HOME_SPACE

Use esse modo de início para abrir o app no Espaço Compacto. No Espaço Compacto, vários apps podem ser executados lado a lado para que os usuários realizem várias tarefas. Qualquer app Android para dispositivos móveis ou telas grandes pode operar no Espaço Compacto, assim como os apps de XR criados com o SDK do Jetpack XR.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED

Use esse modo de inicialização para abrir o app no Espaço Ampliado. No Espaço Ampliado, apenas um app é executado por vez, sem limites de espaço, e todos os outros apps ficam ocultos.


<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
           android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
       <activity
           android:name="com.example.myapp.MainActivity" ... >

           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

A propriedade android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" indica que o aplicativo precisa ser iniciado com um tipo específico de limite. Seu app precisa especificar XR_BOUNDARY_TYPE_LARGE se ele foi projetado para permitir que os usuários se movam pelo espaço físico. Especificar XR_BOUNDARY_TYPE_NO_RECOMMENDATION não fornece recomendações para o tipo de limite de segurança. Portanto, o sistema usa o tipo que já está em uso.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

Recursos do PackageManager para apps de XR

Ao distribuir apps pela Google Play Store, é possível especificar os recursos de hardware ou software necessários no manifesto do app. O elemento uses-feature permite que a Google Play Store filtre adequadamente os apps mostrados aos usuários.

Os recursos a seguir são específicos para apps diferenciados de XR.

android.software.xr.api.spatial

Os apps criados com o SDK do Jetpack para XR precisam incluir esse recurso no manifesto do app. O valor definido para o atributo android:required depende da faixa de lançamento do app.

Se o app agrupar recursos ou conteúdo diferenciados de XR em um APK para dispositivos móveis existente e for publicado na faixa de lançamento para dispositivos móveis, defina o atributo android:required como false:

<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />

Se o app foi criado especificamente para dispositivos com XR e é publicado na faixa de lançamento dedicada ao Android XR, defina o atributo android:required como true:

<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />

android.hardware.xr.input.controller

Esse recurso indica que o app precisa de entrada de um controlador de movimento de alta precisão e 6DoF (graus de liberdade) para funcionar corretamente. Se o app oferece suporte a controles e não funciona sem eles, defina o valor como true. Se o app for compatível com controles, mas puder funcionar sem eles, defina-o como false.

<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

Essa flag indica que o app precisa de captura de movimentos das mãos de alta fidelidade para funcionar corretamente, incluindo posição, orientação e velocidade das articulações na mão do usuário. Se o app for compatível com a captura de movimentos das mãos e não puder funcionar sem ela, defina o valor como true. Se o app for compatível com a captura de movimentos das mãos, mas puder funcionar sem ela, defina como false.

<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

Essa flag indica que o app requer acompanhamento ocular de alta fidelidade para que a entrada funcione corretamente. Se o app oferece suporte ao acompanhamento ocular para entrada e não pode funcionar sem ele, defina o valor como true. Se o app aceitar o acompanhamento ocular para entrada, mas puder funcionar sem ele, defina como false.

<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

android.hardware.xr.input.face_tracking

Essa flag indica que o app requer hardware de captura de expressões faciais para funcionar corretamente. Se o app for compatível com a captura de expressões faciais e não funcionar sem ela, defina o valor como true. Se o app for compatível com a captura de expressões faciais, mas puder funcionar sem ela, defina como false.

<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />

Considerações sobre a compatibilidade do manifesto do app para apps de dispositivos móveis e telas grandes

Conforme descrito na seção Recursos do PackageManager para apps de XR, os apps declaram que usam um recurso em um elemento <uses-feature> no manifesto do app. Alguns recursos, como telefonia ou GPS, podem não ser compatíveis com todos os dispositivos.

Para ver uma lista dos recursos ativados em um dispositivo, execute adb shell pm list features.

Recursos não suportados

A Google Play Store filtra os aplicativos disponíveis para instalação em um dispositivo usando as seguintes declarações de recursos do Android.

Hardware da câmera

android.hardware.camera.ar

android.hardware.camera.autofocus

android.hardware.camera.capability.manual_post_processing

android.hardware.camera.capability.manual_sensor

android.hardware.camera.capability.raw

android.hardware.camera.concurrent

android.hardware.camera.external

android.hardware.camera.flash

android.hardware.camera.level.full

Conectividade

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configuração do dispositivo

android.hardware.ram.low

Configuração do formato

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Entrada

android.hardware.consumerir

android.software.input_methods

Local

android.hardware.location.gps

Comunicação a curta distância (NFC)

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configuração de segurança e hardware

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

android.hardware.identity_credential

android.hardware.identity_credential_direct_access

android.hardware.keystore.limited_use_key

android.hardware.keystore.single_use_key

android.hardware.strongbox_keystore

Sensores

android.hardware.sensor.accelerometer_limited_axes

android.hardware.sensor.accelerometer_limited_axes_uncalibrated

android.hardware.sensor.ambient_temperature

android.hardware.sensor.barometer

android.hardware.sensor.gyroscope_limited_axes

android.hardware.sensor.gyroscope_limited_axes_uncalibrated

android.hardware.sensor.heading

android.hardware.sensor.heartrate

android.hardware.sensor.heartrate.ecg

android.hardware.sensor.hinge_angle

android.hardware.sensor.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Configuração de software

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Telefonia

android.hardware.telephony

android.hardware.telephony.calling

android.hardware.telephony.cdma

android.hardware.telephony.data

android.hardware.telephony.euicc

android.hardware.telephony.euicc.mep

android.hardware.telephony.gsm

android.hardware.telephony.ims

android.hardware.telephony.mbms

android.hardware.telephony.messaging

android.hardware.telephony.radio.access

android.hardware.telephony.subscription

android.software.sip

android.software.sip.voip

Realidade virtual (legado)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Próximas etapas

Agora que você terminou de configurar o manifesto do app e de analisar informações importantes, conheça as maneiras de criar experiências imersivas: