Règle de lancement d'activité

Le comportement de lancement d'activité est défini par les modes de lancement dans les fichiers AndroidManifest.xml des applications, les indicateurs d'intent et les ActivityOptions fournis par l'appelant. Utilisez ActivityOption#setLaunchDisplayId(int) pour cibler un affichage spécifique pour le lancement d'une activité.

  • Par défaut, l'activité se lance sur le même écran que l'appelant. Par exemple, une nouvelle instance d'une activité lancée depuis le lanceur doit être placée sur le même écran sans indicateurs ni options supplémentaires. Veillez à utiliser le bon contexte (Activité ou Application) pour le lancement.
  • Si le lancement est effectué à partir d'une source non associée à un affichage spécifique (par exemple, à partir d'un contexte de shell ou d'application), l'activité est placée sur l'écran supérieur sur lequel l'utilisateur a interagi pour la dernière fois avec l'appareil ou à partir duquel la dernière activité a été lancée.
  • L'intent de lancement d'une activité peut être résolu en une instance d'activité existante dans le système. Dans ce cas, si aucun autre indicateur n'a été fourni, une activité s'affiche sur l'écran où elle a été utilisée pour la dernière fois. Si l'écran cible est spécifié avec ActivityOptions#setTargetDisplayId(), l'activité est déplacée vers cet écran (si les restrictions de sécurité et autres le permettent).

Restrictions de sécurité

Pour empêcher une application malveillante de s'approprier des informations sensibles de l'utilisateur en les lisant à la surface d'un écran virtuel qu'elle a créé, les applications peuvent lancer leurs propres activités uniquement sur un écran virtuel qu'elles ont créé dans Android 10. À noter :

  • Les composants système disposant de l'autorisation INTERNAL_SYSTEM_WINDOW peuvent être lancés sur n'importe quel écran.
  • Les appelants disposant de l'autorisation ACTIVITY_EMBEDDING peuvent lancer des activités à partir d'autres applications qui comportent l'indicateur ActivityInfo.FLAG_ALLOW_EMBEDDED.
  • Le lancement d'activités sur des écrans privés n'est autorisé que pour le propriétaire ou les activités présentes sur cet écran.

Des restrictions similaires s'appliquent à l'ajout de fenêtres aux écrans.

Android 10 inclut la méthode ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) pour vérifier les restrictions de sécurité de l'application avant de tenter de la lancer sur un écran. Dans Android 9 (et versions antérieures), les résultats de lancement restreints génèrent SecurityException.

La plupart des restrictions de sécurité sont appliquées dans la méthode ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().