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'intent et les ActivityOptions fournis par l'appelant. Utilisez ActivityOption#setLaunchDisplayId(int)
pour cibler un écran spécifique pour le lancement de l'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 à partir du lanceur d'applications doit être placée sur le même écran sans options ni indicateurs supplémentaires. Veillez à utiliser le contexte approprié (activité ou application) pour le lancement.
- Si le lancement est effectué à partir d'une source non associée à un écran spécifique (par exemple, à partir d'un shell ou d'un contexte 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 indicateur supplémentaire 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 la sécurité et d'autres restrictions le permettent).
Restrictions de sécurité
Pour empêcher une application malveillante de s'approprier des informations sensibles à l'utilisateur en les lisant à partir de la surface d'un écran virtuel qu'elle a créé, les applications ne peuvent lancer leurs propres activités que sur un écran virtuel de leur création dans Android 10. À noter :
- Les composants système disposant de l'autorisation
INTERNAL_SYSTEM_WINDOW
peuvent se lancer sur n'importe quel écran. - Les appelants disposant de l'autorisation
ACTIVITY_EMBEDDING
peuvent lancer des activités à partir d'autres applications qui disposent du flagActivityInfo.FLAG_ALLOW_EMBEDDED
. - Les lancements d'activités sur des é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 limités génèrent une erreur SecurityException
.
La plupart des restrictions de sécurité sont appliquées dans la méthode ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.