La experiencia de los lentes con IA se basa en la APIActivity del framework de Android existente y se incluyen conceptos adicionales para admitir los aspectos únicos de los lentes con IA. A diferencia de los visores de RE que ejecutan un APK completo en el dispositivo, los lentes con IA usan una actividad dedicada que se ejecuta dentro de la app existente de tu teléfono. Esta actividad se proyecta desde el dispositivo host hacia los lentes con IA.
Para crear la experiencia de lentes con IA de tu app, extiende tu app para teléfonos existente creando un nuevo Activity proyectado para lentes con IA. Esta actividad sirve como el punto de entrada principal de inicio para tu app en los lentes con IA. Este enfoque simplifica el desarrollo porque puedes compartir y reutilizar la lógica empresarial entre las experiencias de tu teléfono y tus lentes con IA.
Declara tu actividad en el manifiesto de tu app
Al igual que con otros tipos de actividades, debes declarar tu actividad en el archivo de manifiesto de la app para que el sistema la vea y la ejecute.
<application>
<activity
android:name=".AIGlassesActivity"
android:exported="true"
android:requiredDisplayCategory="xr_projected"
android:label="Example AI Glasses activity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
</application>
Puntos clave sobre el código
- Especifica
xr_projectedpara el atributoandroid:requiredDisplayCategorypara indicarle al sistema que esta actividad debe usar un contexto proyectado para acceder al hardware de un dispositivo conectado.
Crea tu actividad
A continuación, crearás una pequeña actividad que pueda mostrar algo en los lentes con IA cada vez que se encienda la pantalla.
/**
* When this activity launches, it stays in the started state.
*/
class AIGlassesActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val projectedWindowManager = ProjectedWindowManager.create(this)
setContent {
GlassesComposeContent {
GlimmerTheme {
TopBarScaffold(modifier = Modifier.background(color = Color.Black)) {
ProjectedDisplayController.create(activity)
.addPresentationModeChangedListener {
presentationModeFlags ->
// Check whether visuals are on or off
val areVisualsOff = !presentationModeFlags.hasPresentationMode(VISUALS_ON)
}
// Conditional UI based on presentation mode.
if (areVisualsOff) {
// Implementation for the when the display is off.
} else {
DisplayUi()
}
}
}
}
}
}
override fun onStart() {
// Do things to make the user aware that this activity is active (for
// example, play audio frequently), when the display is off.
}
override fun onStop() {
// Stop all the data source access.
}
}
Puntos clave sobre el código
AIGlassesActivityextiendeComponentActivity, tal como esperarías en el desarrollo para dispositivos móviles.- El bloque
setContentdentro deonCreate()define la raíz del árbol de IU componible para la actividad. - Inicializa la IU durante el método
onCreate()de la actividad (consulta el ciclo de vida proyectado de la actividad). - Configura un diseño base
TopBarScaffoldcon un fondo negro para la IU con Jetpack Compose Glimmer.
Implementa el elemento componible
La actividad que creaste hace referencia a una función DisplayUi componible que debes implementar. El siguiente código usa Jetpack Compose Glimmer para definir un elemento componible que puede mostrar texto en la pantalla de los lentes con IA:
@Composable
fun DisplayUi() {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text("Hello World!")
}
}
Puntos clave sobre el código
- Como definiste en tu actividad anteriormente, la función
DisplayUiincluye el contenido componible que el usuario ve cuando la pantalla de los lentes con IA está encendida. - El componente
Textde Glimmer de Jetpack Compose muestra el texto "Hello World!" en la pantalla de los lentes.
Cómo iniciar tu actividad
Ahora que creaste una actividad básica, puedes lanzarla en tus lentes. Para acceder al hardware de los lentes, tu app debe iniciar la actividad con opciones específicas que le indiquen al sistema que use un contexto proyectado, como se muestra en el siguiente código:
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, AIGlassesActivity::class.java)
context.startActivity(intent, options.toBundle())
El método createProjectedActivityOptions() en ProjectedContext genera las opciones necesarias para iniciar tu actividad en un contexto proyectado.
El parámetro context puede ser un contexto del teléfono o del dispositivo de anteojos.
Cómo verificar si los lentes con IA están conectados
Si quieres determinar si los lentes con IA de un usuario están conectados a su teléfono antes de iniciar tu actividad, usa el método ProjectedContext.isProjectedDeviceConnected(). Este método devuelve un Flow<Boolean> que tu app puede observar para obtener actualizaciones en tiempo real sobre el estado de la conexión.
Próximos pasos
Ahora que creaste tu primera actividad para los lentes con IA, explora otras formas de extender su funcionalidad:
- Cómo controlar la salida de audio con Text-to-Speech
- Cómo controlar la entrada de audio con el reconocimiento de voz automático
- Compila la IU con Jetpack Compose Glimmer
- Acceder al hardware de los lentes con IA