Il comportamento di avvio dell'attività è definito dalle modalità di avvio nei file
AndroidManifest.xml
delle app, dai flag intent e da ActivityOptions
forniti dal chiamante. Utilizza ActivityOption#setLaunchDisplayId(int)
per
scegliere un display specifico per l'avvio dell'attività.
- Per impostazione predefinita, l'attività viene avviata sullo stesso display del chiamante. Ad esempio, una nuova istanza di un'attività avviata da Avvio app deve essere posizionata sullo stesso display senza ulteriori flag o opzioni. Assicurati di utilizzare il contesto corretto (Attività anziché Applicazione) per l'avvio.
- Se l'avvio viene eseguito da un'origine non associata a un display specifico (ad esempio da una shell o dal contesto dell'applicazione), l'attività viene posizionata sul display superiore con cui l'utente ha interagito per ultimo con il dispositivo o da cui è stata avviata l'ultima attività.
- L'intent di avviare un'attività può essere risolto in un'istanza di attività esistente nel sistema. In questo caso, se non sono stati forniti ulteriori flag, un'attività viene visualizzata sullo stesso display in cui è stata utilizzata l'ultima volta. Se il display di destinazione
è specificato con
ActivityOptions#setTargetDisplayId()
, l'attività viene spostata su quel display (se consentito dalla sicurezza e da altre limitazioni).
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 propria creazione in Android 10. Tuttavia:
- I componenti di sistema con l'autorizzazione
INTERNAL_SYSTEM_WINDOW
possono essere avviati su qualsiasi display. - I chiamanti con l'autorizzazione
ACTIVITY_EMBEDDING
possono avviare attività da altre app con il flagActivityInfo.FLAG_ALLOW_EMBEDDED
. - L'avvio di attività su display privati è consentito solo al proprietario o alle attività presenti su quel 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 per
l'app prima di tentare di avviarla su un display. In Android 9
(e versioni precedenti), i risultati di avvio con limitazioni generano SecurityException
.
La maggior parte delle limitazioni di sicurezza viene applicata nel metodo
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.