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_WINDOWpeuvent être lancés sur n'importe quel écran. - Les appelants disposant de l'autorisation
ACTIVITY_EMBEDDINGpeuvent lancer des activités à partir d'autres applications qui comportent l'indicateurActivityInfo.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().