Comienza a crear experiencias inmersivas

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Visores de realidad extendida
Lentes de realidad extendida con cable

Después de instalar y configurar Android Studio, crear un proyecto y configurar el SDK de Jetpack XR, todo estará listo para que comiences a crear experiencias envolventes para dispositivos como visores de realidad extendida y lentes de realidad extendida con cable.

Antes de comenzar a explorar todas las formas en que puedes compilar, revisa la información y completa las tareas de las siguientes secciones para asegurarte de que tu app esté configurada para el desarrollo de XR envolvente.

Configura el archivo de manifiesto de tu app

Al igual que con otros proyectos de apps para Android, tu app para Android XR debe tener un archivo AndroidManifest.xml con parámetros de configuración de manifiesto específicos. El archivo de manifiesto describe información esencial sobre tu app para las herramientas de compilación de Android, el sistema operativo Android y Google Play. Para obtener más información, consulta la guía de descripción general del manifiesto de la app.

En el caso de las apps diferenciadas para XR, tu archivo de manifiesto debe contener los siguientes elementos y atributos:

Propiedad PROPERTY_XR_ACTIVITY_START_MODE

La propiedad android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" permite que el sistema sepa que se debe iniciar una actividad en un modo específico cuando se inicia la actividad.

Esta propiedad tiene los siguientes valores:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (solo para el SDK de Jetpack XR)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (solo para el SDK de Jetpack XR)

XR_ACTIVITY_START_MODE_HOME_SPACE

Usa este modo de inicio para iniciar tu app en el Espacio principal. En el espacio principal, se pueden ejecutar varias apps una al lado de la otra para que los usuarios puedan realizar varias tareas a la vez. Cualquier app para Android para dispositivos móviles o pantallas grandes puede funcionar en el espacio principal, así como las apps de RE compiladas con el SDK de 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

Usa este modo de inicio para abrir tu app en el modo de espacio completo. En el modo de espacio completo, solo se ejecuta una app a la vez, sin límites de espacio, y todas las demás apps se ocultan.


<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>

La propiedad android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" indica que la aplicación se debe iniciar con un tipo específico de límite. Tu app debe especificar XR_BOUNDARY_TYPE_LARGE si está diseñada para permitir que los usuarios se muevan por su espacio físico. Especificar XR_BOUNDARY_TYPE_NO_RECOMMENDATION no proporciona recomendaciones para el tipo de límite de seguridad, por lo que el sistema usa el tipo que ya está en uso.

<manifest ... >

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

Funciones de PackageManager para apps de RE

Cuando distribuyes apps a través de Google Play Store, puedes especificar las funciones de hardware o software necesarias en el manifiesto de la app. El elemento uses-feature permite que Play Store filtre de forma adecuada las apps que se muestran a los usuarios.

Las siguientes funciones son específicas de las apps diferenciadas para XR.

android.software.xr.api.spatial

Las apps que se compilan con el SDK de XR de Jetpack deben incluir esta función en el manifiesto de la app. El valor que establezcas para el atributo android:required dependerá del segmento de tu app.

Si tu app incluye funciones o contenido diferenciados para XR en un APK para dispositivos móviles existente y se publica en el segmento para dispositivos móviles, establece el atributo android:required en 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" />

Si tu app se creó específicamente para dispositivos compatibles con XR y se publica en el segmento exclusivo para Android XR, establece el atributo android:required en 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

Esta función indica que la app requiere la entrada de un controlador de movimiento de alta precisión de 6DoF (grados de libertad) para funcionar correctamente. Si tu app admite controles y no puede funcionar sin ellos, establece el valor en true. Si tu app admite controles, pero puede funcionar sin ellos, configúrala 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

Esta marca indica que la app requiere un monitoreo de manos de alta fidelidad para funcionar correctamente, lo que incluye la posición, la orientación y la velocidad de las articulaciones de la mano del usuario. Si tu app admite el monitoreo de manos y no puede funcionar sin él, establece el valor en true. Si tu app admite el monitoreo de manos, pero puede funcionar sin él, configúralo 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

Este indicador señala que la app requiere un seguimiento de ojos de alta fidelidad para que la entrada funcione correctamente. Si tu app admite el seguimiento de ojos para la entrada y no puede funcionar sin él, establece el valor en true. Si tu app admite el seguimiento de ojos para la entrada, pero puede funcionar sin él, establécelo en 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

Esta marca indica que la app requiere hardware de seguimiento facial para funcionar correctamente. Si tu app admite el seguimiento facial y no puede funcionar sin él, establece el valor en true. Si tu app admite el seguimiento facial, pero puede funcionar sin él, configúralo 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" />

Consideraciones de compatibilidad del manifiesto de la app para apps para dispositivos móviles y pantallas grandes

Como se describe en la sección Funciones de PackageManager para apps de RE, las apps declaran que usan una función declarándola en un elemento <uses-feature> en el manifiesto de la app. Es posible que algunas funciones, como la telefonía o el GPS, no sean compatibles con todos los dispositivos.

Para obtener una lista de las funciones que están habilitadas para un dispositivo, ejecuta adb shell pm list features.

Características no compatibles

Google Play Store filtra las aplicaciones disponibles para instalar en un dispositivo con las siguientes declaraciones de funciones de Android.

Hardware de la cámara

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

Conectividad

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configuración del dispositivo

android.hardware.ram.low

Configuración del factor de forma

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

Ubicación

android.hardware.location.gps

Comunicación de campo cercano

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configuración de seguridad y 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

Configuración 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

Telefonía

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

Realidad virtual (heredada)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Próximos pasos

Ahora que terminaste de configurar el manifiesto de tu app y de revisar la información importante, explora las formas en que puedes crear experiencias envolventes: