Norme relative al lancio delle attività

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 flag ActivityInfo.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().