Zachowanie podczas uruchamiania działania jest definiowane przez tryby uruchamiania w plikach AndroidManifest.xml
aplikacji, flagach intencji i ActivityOptions dostarczonych przez obiekt wywołujący. Użyj ActivityOption#setLaunchDisplayId(int)
aby wybrać konkretny ekran w celu uruchomienia działania.
- Domyślnie działanie jest uruchamiane na tym samym ekranie, co osoba dzwoniąca. Na przykład nowa instancja działania rozpoczęta z poziomu programu uruchamiającego powinna zostać umieszczona na tym samym ekranie bez dodatkowych flag i opcji. Pamiętaj, aby podczas uruchamiania użyć prawidłowego kontekstu (aktywność kontra aplikacja).
- Jeżeli uruchomienie następuje ze źródła niepowiązanego z konkretnym wyświetlaczem (np. z powłoki lub kontekstu aplikacji), wówczas aktywność umieszczana jest na górnym wyświetlaczu, na którym użytkownik ostatni raz wszedł w interakcję z urządzeniem lub z którego wykonano ostatnią czynność wystrzelony.
- Zamiar uruchomienia działania można przełożyć na istniejącą instancję działania w systemie. W takim przypadku, jeśli nie dostarczono żadnych dodatkowych flag, działanie pojawia się na tym samym wyświetlaczu, na którym było ostatnio używane. Jeśli docelowy wyświetlacz jest określony za pomocą
ActivityOptions#setTargetDisplayId()
, wówczas aktywność jest przenoszona na ten ekran (jeśli pozwalają na to zabezpieczenia i inne ograniczenia).
Ograniczenia bezpieczeństwa
Aby zapobiec przywłaszczaniu przez złośliwą aplikację informacji wrażliwych użytkownika poprzez odczytywanie ich z powierzchni utworzonego przez siebie wirtualnego wyświetlacza, aplikacje mogą uruchamiać własne działania tylko na wirtualnym wyświetlaczu, który utworzyły w systemie Android 10. Jednakże:
- Komponenty systemu z uprawnieniem
INTERNAL_SYSTEM_WINDOW
można uruchomić na dowolnym wyświetlaczu. - Osoby dzwoniące z uprawnieniem
ACTIVITY_EMBEDDING
mogą uruchamiać działania z innych aplikacji, które mają flagęActivityInfo.FLAG_ALLOW_EMBEDDED
. - Uruchamianie aktywności na ekranach prywatnych jest dozwolone tylko dla właściciela lub działań obecnych na tym ekranie.
Podobne ograniczenia dotyczą dodawania okien do wyświetlaczy.
Android 10 zawiera metodę ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent)
aby sprawdzić ograniczenia bezpieczeństwa aplikacji przed próbą uruchomienia na wyświetlaczu. W systemie Android 9 (i starszych) wyniki ograniczonego uruchamiania zgłaszają SecurityException
.
Większość ograniczeń bezpieczeństwa jest stosowana w metodzie ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
.