L'expérience des lunettes d'IA repose sur le framework Activity et l'API Android existants, et inclut des concepts supplémentaires pour prendre en charge les aspects uniques des lunettes d'IA. Contrairement aux casques XR qui exécutent un APK complet sur l'appareil, les lunettes IA utilisent une activité dédiée qui s'exécute dans l'application existante de votre téléphone. Cette activité est projetée de l'appareil hôte vers les lunettes IA.
Pour créer l'expérience de lunettes IA de votre application, vous devez étendre votre application mobile existante en créant un Activity projeté pour les lunettes IA. Cette activité sert de point d'entrée principal pour le lancement de votre application sur des lunettes IA. Cette approche simplifie le développement, car vous pouvez partager et réutiliser la logique métier entre vos expériences sur téléphone et sur lunettes d'IA.
Déclarer votre activité dans le fichier manifeste de votre application
Comme pour les autres types d'activités, vous devez déclarer votre activité dans le fichier manifeste de votre application pour que le système puisse la voir et l'exécuter.
<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>
Points clés concernant le code
- Spécifie
xr_projectedpour l'attributandroid:requiredDisplayCategoryafin d'indiquer au système que cette activité doit utiliser un contexte projeté pour accéder au matériel d'un appareil connecté.
Créer votre activité
Ensuite, vous allez créer une petite activité qui peut afficher quelque chose sur les lunettes d'IA chaque fois que l'écran est allumé.
/**
* 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.
}
}
Points clés concernant le code
AIGlassesActivityétendComponentActivity, comme vous vous y attendez dans le développement mobile.- Le bloc
setContentdansonCreate()définit la racine de l'arborescence de l'UI composable pour l'activité. - Initialise l'UI pendant la méthode
onCreate()de l'activité (voir cycle de vie de l'activité projeté). - Configure une mise en page de base
TopBarScaffoldavec un arrière-plan noir pour l'UI à l'aide de Jetpack Compose Glimmer.
Implémenter le composable
L'activité que vous avez créée fait référence à une fonction composable DisplayUi que vous devez implémenter. Le code suivant utilise Jetpack Compose Glimmer pour définir un composable qui peut afficher du texte sur l'écran des lunettes d'IA :
@Composable
fun DisplayUi() {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text("Hello World!")
}
}
Points clés concernant le code
- Comme vous l'avez défini précédemment dans votre activité, la fonction
DisplayUiinclut le contenu composable que l'utilisateur voit lorsque l'écran des lunettes IA est allumé. - Le composant Glimmer
Textde Jetpack Compose affiche le texte "Hello World!" sur l'écran des lunettes.
Démarrer votre activité
Maintenant que vous avez créé une activité de base, vous pouvez la lancer sur vos lunettes. Pour accéder au matériel des lunettes, votre application doit démarrer votre activité avec des options spécifiques qui indiquent au système d'utiliser un contexte projeté, comme indiqué dans le code suivant :
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, AIGlassesActivity::class.java)
context.startActivity(intent, options.toBundle())
La méthode createProjectedActivityOptions() dans ProjectedContext génère les options nécessaires pour démarrer votre activité dans un contexte projeté.
Le paramètre context peut être un contexte provenant du téléphone ou des lunettes.
Vérifier si les lunettes IA sont connectées
Si vous souhaitez déterminer si les lunettes IA d'un utilisateur sont connectées à son téléphone avant de lancer votre activité, utilisez la méthode ProjectedContext.isProjectedDeviceConnected(). Cette méthode renvoie un Flow<Boolean> que votre application peut observer pour obtenir des informations en temps réel sur l'état de la connexion.
Étapes suivantes
Maintenant que vous avez créé votre première activité pour les lunettes IA, découvrez d'autres façons d'étendre leurs fonctionnalités :
- Gérer la sortie audio à l'aide de Text-to-Speech
- Gérer les entrées audio à l'aide de la reconnaissance vocale automatique
- Créer une UI avec Jetpack Compose Glimmer
- Accéder au matériel des lunettes d'IA