Il comportamento di avvio dell'attività è definito dalle modalità di avvio nei file AndroidManifest.xml
delle app, dagli indicatori intent e da ActivityOptions forniti dall'autore della chiamata. Utilizza ActivityOption#setLaunchDisplayId(int)
per scegliere come target una visualizzazione specifica per il lancio dell'attività.
- Per impostazione predefinita, l'attività viene avviata sullo stesso display del chiamante. Ad esempio, una nuova istanza di un'attività avviata dal programma di avvio deve essere collocata sullo stesso display senza indicatori o opzioni aggiuntivi. Assicurati di utilizzare il contesto corretto (Attività o Applicazione) per il lancio.
- Se il lancio viene eseguito da un'origine non associata a un display specifico (ad esempio da una shell o da un contesto dell'applicazione), l'attività viene posizionata sul display superiore su cui l'utente ha interagito per ultimo con il dispositivo o da cui è stata avviata l'ultima attività.
- L'intenzione di avviare un'attività può essere risolta in un'istanza di attività esistente nel sistema. In questo caso, se non sono stati forniti flag aggiuntivi, viene visualizzata un'attività sullo stesso display in cui è stata utilizzata per l'ultima volta. Se la schermata di destinazione è specificata con
ActivityOptions#setTargetDisplayId()
, l'attività viene spostata in quella schermata (se consentito da restrizioni di sicurezza e di altro tipo).
Limitazioni di sicurezza
Per impedire a un'app dannosa di appropriarsi indebitamente di informazioni sensibili dell'utente leggendole dalla superficie di un display virtuale che ha creato, le app possono avviare le proprie attività solo su un display virtuale di loro creazione in Android 10. Tuttavia:
- I componenti di sistema con l'autorizzazione
INTERNAL_SYSTEM_WINDOW
possono essere avviati su qualsiasi display. - Gli utenti che chiamano con l'autorizzazione
ACTIVITY_EMBEDDING
possono avviare attività da altre app che hanno il flagActivityInfo.FLAG_ALLOW_EMBEDDED
. - I lanci di attività su display privati sono consentiti solo per il proprietario o per le attività presenti sul display.
Limitazioni simili si applicano all'aggiunta di finestre ai display.
Android 10 include il
metodo ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent)
per controllare le limitazioni di sicurezza dell'app
prima di tentare di avviarla su un display. In Android 9
(e versioni precedenti), i risultati del lancio con limitazioni generano SecurityException
.
La maggior parte delle limitazioni di sicurezza viene applicata nel metodoActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.