Zasady uruchamiania działalności

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