Sur les lunettes audio, le système achemine les entrées physiques (comme les gestes sur le pavé tactile ou les pressions sur les boutons) en fonction de la perception de l'utilisateur plutôt que de la mise au point de l'affichage visuel. Comme les utilisateurs ne voient pas d'interface utilisateur, le système achemine les entrées physiques vers l'activité projetée de l'expérience d'application que l'utilisateur perçoit ou avec laquelle il interagit activement.
Comment le système détermine-t-il la vigilance de l'utilisateur ?
Le système détermine la présence de l'utilisateur en surveillant les flux de données actifs suivants :
- Flux de sortie audio : lectures vocales, signaux audio ou lecture de contenus multimédias.
- Flux d'enregistrement du micro : commandes vocales ou capture audio en cours de l'environnement d'un utilisateur.
- Flux de capture de l'appareil photo : flux vidéo ou photo.
Certains flux de données sont temporaires et ne retiennent l'attention de l'utilisateur que pendant une courte période. Par exemple, une lecture audio du prochain virage qu'un utilisateur doit prendre lorsqu'il suit un itinéraire. D'autres flux de données sont indéfinis et maintiennent la sensibilisation de l'utilisateur tant qu'ils continuent. Par exemple, la lecture de contenus multimédias avec une playlist aléatoire sans fin. Lorsqu'un flux de données temporaire interrompt un flux de données indéfini, il attire temporairement l'attention de l'utilisateur.
Simultanéité et sélection de l'entrée
Les utilisateurs exécutent souvent plusieurs expériences d'application simultanément sur des lunettes audio. Par exemple, un utilisateur peut écouter de la musique tout en suivant la navigation détaillée. Dans ce cas, le système attribue un état de simultanéité et déplace la sélection d'entrée pour qu'elle corresponde à la sélection audio en procédant comme suit :
- Reprise ou arrêt de l'activité projetée de votre application.
- Routage de l'entrée physique vers l'activité projetée au premier plan.
Cette approche permet de maintenir une expérience utilisateur cohérente.
Laisser le système relancer votre activité projetée
Lorsque votre application attire l'attention de l'utilisateur, en particulier si son activité projetée était en arrière-plan, le système doit pouvoir reprendre l'activité et lui acheminer les entrées physiques.
Pour vous assurer que le système peut relancer votre activité :
Créer un intent en attente : créez un
Intentexplicite pointant vers l'activité projetée cible. Encapsulez l'intent dans unPendingIntentet définissezFLAG_UPDATE_CURRENTouFLAG_IMMUTABLEpour maintenir un comportement de lancement sécurisé et prévisible :// Build an explicit Intent pointing to this projected activity and wrap it in a // PendingIntent so the system can relaunch it and route physical input to it. private val pendingIntent: PendingIntent by lazy { val intent = Intent(this, ProjectedInputFocusActivity::class.java) PendingIntent.getActivity( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) }
Enregistrez le récepteur d'entrée : obtenez une instance de
ProjectedActivityCompatet enregistrez votrePendingIntenten tant que récepteur d'entrée désigné en le transmettant àsetActivityAsInputReceiver.override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) lifecycleScope.launch { // Create or obtain the ProjectedActivityCompat instance val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) // Register the PendingIntent as the designated input receiver projectedActivity.setActivityAsInputReceiver(pendingIntent) }
Effacer le récepteur d'entrée lors du nettoyage : lorsque votre activité est détruite ou n'a plus besoin de recevoir d'entrées physiques, effacez le récepteur d'entrée pour éviter les envois
PendingIntentobsolètes et les fuites de mémoire.override fun onDestroy() { super.onDestroy() lifecycleScope.launch { val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) projectedActivity.clearActivityAsInputReceiver() } }
Comprendre comment le curseur de saisie se déplace entre les états de simultanéité
Pour déterminer quelle application reçoit la sélection d'entrée, le système évalue les flux de données actifs et achemine l'entrée en fonction de ces états de simultanéité :
| État de simultanéité | Contexte environnemental | Comportement du système et sélection de l'entrée | Exemple |
|---|---|---|---|
Non simultané |
Une activité projetée autonome est active. Aucune session multimédia en arrière-plan n'est en cours d'exécution. |
La sélection d'entrée est entièrement redirigée vers votre activité projetée, même pendant les périodes de silence entre les lectures. |
Un utilisateur exécute une application de suivi de l'entraînement. Même pendant les moments de silence, les entrées du pavé tactile sont directement acheminées vers l'application de fitness. |
Semi-concurrent |
Une activité projetée est active, mais une session multimédia en arrière-plan est en pause. |
Par défaut, la sélection d'entrée est définie sur les commandes multimédias mises en pause pendant les périodes de silence entre les lectures actives de l'application. |
Un utilisateur exécute une application de suivi de l'entraînement pendant que la musique est en pause. Entre les mises à jour du coach sportif, appuyer sur le pavé tactile permet de reprendre la musique plutôt que de déclencher une fonction d'entraînement. |
Simultané |
La lecture double est active (par exemple, l'annonce audio de votre application interrompt ou réduit la musique de fond). |
La priorité audio est égale à la priorité de saisie. Le focus d'entrée est dirigé vers votre activité projetée pendant les lectures actives et revient aux commandes multimédias à la fin du flux audio. |
Un utilisateur écoute de la musique lorsqu'une application de navigation lit une instruction. Pendant la lecture, l'application de navigation est sélectionnée. Une fois la lecture terminée, le curseur revient sur les commandes multimédias. |
Mesures de protection du timing du système
Le système fournit les protections suivantes pour éviter les saisies accidentelles ou les comportements inattendus pour les utilisateurs :
- Délais de grâce pour les activités projetées récemment lancées : pour tenir compte du chargement des éléments lors d'un démarrage à froid ou des retards du réseau, les activités projetées récemment lancées bénéficient d'un bref délai de grâce pour établir un flux de données et attirer l'attention de l'utilisateur avant que le système n'arrête l'activité projetée et ne la déplace en arrière-plan.
- Le focus est routé en fonction de la perception de l'utilisateur : si la perception de l'utilisateur change à partir d'un nouveau flux de données actif, comme une lecture audio, le système reprend instantanément votre activité projetée et lui route le focus d'entrée.
- Tampons de transition pendant la lecture multimédia : lorsqu'une lecture transitoire se termine pendant la lecture multimédia en arrière-plan, la sélection d'entrée reste momentanément sur l'activité projetée. La période tampon permet d'éviter les saisies accidentelles, par exemple lorsqu'un utilisateur tente de couper le son de la lecture, mais passe à un autre morceau de musique. Après le tampon de transition, le système arrête l'activité projetée de l'application et redirige la sélection vers les commandes multimédias.
- Les activités projetées inactives sont arrêtées ou mises en pause : le système arrête toutes les activités projetées inactives sans flux de données actifs après quelques minutes (ou momentanément pour la sortie multimédia en cours lorsqu'elle est mise en pause).
Transitions de sélection d'entrée en pratique
Pour comprendre comment le focus de saisie passe d'un état de simultanéité à un autre, prenons l'exemple d'une application de navigation qui fournit une navigation détaillée :
Scénario A : Non simultané (média inactif)
Dans ce scénario, le système achemine l'entrée vers l'application de navigation, qui est consciente de l'utilisateur pendant tout le trajet.
- L'utilisateur lance la navigation sans musique de fond.
- L'application de navigation lance son activité projetée sur les lunettes audio.
- Comme aucune session multimédia n'est active, l'application de navigation conserve la sélection de l'entrée du pavé tactile tout au long du trajet.
- Actions de l'utilisateur : appuyer sur l'écran pendant une lecture active peut couper le son du guidage. Appuyer pendant un silence peut répéter la dernière instruction.
Scénario B : Semi-simultané (contenu multimédia mis en pause)
Dans ce scénario, le système achemine l'entrée vers les commandes multimédias du système chaque fois que l'application de navigation n'est pas au premier plan.
- L'utilisateur lance la navigation alors que la musique en arrière-plan est en pause.
- Pendant les périodes de silence entre les lectures, la sélection d'entrée est définie par défaut sur les commandes multimédias.
- Lorsque l'application de navigation énonce "Dans 150 mètres, tournez à gauche", elle obtient la priorité d'entrée.
- Actions de l'utilisateur : appuyer sur l'écran pendant la lecture peut couper le son du guidage. Appuyer sur l'écran pendant un silence permet de reprendre la lecture de la musique.
Scénario C : Simultané (média actif)
Dans ce scénario, le système achemine l'entrée vers les commandes multimédias du système chaque fois que l'application de navigation n'est pas consciente de l'utilisateur, et l'audio de la lecture multimédia active est atténué pendant chaque lecture de l'application de navigation.
- L'utilisateur lance la navigation pendant que de la musique est en cours de lecture.
- Lors de la lecture d'une instruction, le système réduit le volume de l'audio en arrière-plan et déplace le curseur de saisie vers l'application de navigation.
- Actions de l'utilisateur : appuyer sur l'écran pendant la lecture peut couper le son du guidage. Appuyer sur l'écouteur pendant les périodes de silence permet de contrôler la lecture d'un contenu multimédia (pour le mettre en pause ou le reprendre).