Politique de lancement d'activité

Le comportement de lancement de l'activité est défini par les modes de lancement dans les fichiers AndroidManifest.xml des applications, les indicateurs d'intention 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é démarrée à partir du lanceur doit être placée sur le même écran sans indicateurs ni options supplémentaires. Assurez-vous d'utiliser le contexte correct (Activité versus 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 shell ou d'un contexte d'application), alors 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é effectuée. lancé.
  • L'intention de lancer une activité peut être résolue en une instance d'activité existante dans le système. Dans un tel cas, si aucun indicateur supplémentaire n'a été fourni, une activité apparaît sur le même écran où elle a été utilisée pour la dernière fois. Si l'affichage cible est spécifié avec ActivityOptions#setTargetDisplayId() , alors l'activité est déplacée vers cet affichage (si cela est autorisé par la sécurité et d'autres restrictions).

Restrictions de sécurité

Pour empêcher une application malveillante de détourner des informations sensibles sur l'utilisateur en les lisant depuis la surface d'un écran virtuel qu'elle a créé, les applications peuvent lancer leurs propres activités uniquement sur un écran virtuel de leur création dans Android 10. Cependant :

  • Les composants système dotés 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 portant l'indicateur ActivityInfo.FLAG_ALLOW_EMBEDDED .
  • Les lancements d'activités sur les écrans privés ne sont autorisés 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. Sous Android 9 (et versions antérieures), les résultats de lancement restreint génèrent SecurityException .

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