L'esperienza degli occhiali AI si basa sul framework
API Activity Android esistente e include concetti aggiuntivi per supportare gli aspetti unici degli occhiali AI. A differenza dei visori XR che eseguono un APK completo sul dispositivo, gli occhiali AI utilizzano
un'attività dedicata che viene eseguita all'interno dell'app esistente dello smartphone. Questa attività
viene proiettata dal dispositivo host agli occhiali AI.
Per creare l'esperienza con gli occhiali AI della tua app, estendi l'app per smartphone esistente
creando un nuovo intent proiettato Activity per gli occhiali AI. Questa attività funge
da punto di accesso principale per l'avvio della tua app sugli occhiali AI. Questo approccio
semplifica lo sviluppo perché puoi condividere e riutilizzare la logica di business tra
le esperienze dello smartphone e degli occhiali AI.
Dichiarare l'attività nel file manifest dell'app
Come per altri tipi di attività, devi dichiarare la tua attività nel file manifest dell'app affinché il sistema possa visualizzarla ed eseguirla.
<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>
Punti chiave sul codice
- Specifica
xr_projectedper l'attributoandroid:requiredDisplayCategoryper indicare al sistema che questa attività deve utilizzare un contesto proiettato per accedere all'hardware da un dispositivo connesso.
Crea la tua attività
Successivamente, creerai una piccola attività che può visualizzare qualcosa sugli occhiali AI ogni volta che il display è acceso.
/**
* 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.
}
}
Punti chiave sul codice
AIGlassesActivityestendeComponentActivity, proprio come ti aspetteresti nello sviluppo mobile.- Il blocco
setContentall'interno dionCreate()definisce la radice dell'albero dell'interfaccia utente componibile per l'attività. - Inizializza l'interfaccia utente durante il metodo
onCreate()dell'attività (vedi ciclo di vita dell'attività proiettato). - Configura un layout di base
TopBarScaffoldcon uno sfondo nero per la UI utilizzando Jetpack Compose Glimmer.
Implementare il composable
L'attività che hai creato fa riferimento a una funzione componibile DisplayUi che
devi implementare. Il seguente codice utilizza Jetpack Compose Glimmer per
definire un elemento componibile che può visualizzare del testo sul display degli occhiali AI:
@Composable
fun DisplayUi() {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text("Hello World!")
}
}
Punti chiave sul codice
- Come hai definito in precedenza nell'attività, la funzione
DisplayUiinclude i contenuti componibili che l'utente vede quando il display degli occhiali AI è acceso. - Il componente Jetpack Compose Glimmer
Textmostra il testo "Hello World!" sul display degli occhiali.
Avviare l'attività
Ora che hai creato un'attività di base, puoi avviarla sugli occhiali. Per accedere all'hardware degli occhiali, la tua app deve avviare l'attività con opzioni specifiche che indicano al sistema di utilizzare un contesto proiettato, come mostrato nel seguente codice:
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, AIGlassesActivity::class.java)
context.startActivity(intent, options.toBundle())
Il metodo createProjectedActivityOptions() in ProjectedContext
genera le opzioni necessarie per avviare l'attività in un contesto proiettato.
Il parametro context può essere un contesto dello smartphone o degli occhiali.
Controllare se gli occhiali con AI sono connessi
Se vuoi determinare se gli occhiali AI di un utente sono connessi al suo
smartphone prima di avviare l'attività, utilizza il
metodo ProjectedContext.isProjectedDeviceConnected(). Questo metodo
restituisce un Flow<Boolean> che la tua app può osservare per ricevere aggiornamenti in tempo reale sullo
stato della connessione.
Passaggi successivi
Ora che hai creato la tua prima attività per gli occhiali AI, esplora altri modi per estenderne la funzionalità:
- Gestire l'output audio utilizzando Text to Speech
- Gestire l'input audio utilizzando il riconoscimento vocale automatico
- Creare UI con Jetpack Compose Glimmer
- Accedere all'hardware degli occhiali AI