Sposób uruchamiania aktywności jest określany przez tryby uruchamiania w plikach AndroidManifest.xml aplikacji, flagi intencji i elementy ActivityOptions
dostarczane przez wywołującego. Użyj ActivityOption#setLaunchDisplayId(int), aby kierować reklamy na konkretny wyświetlacz w celu uruchomienia aktywności.
- Domyślnie aktywność jest uruchamiana na tym samym wyświetlaczu, na którym znajduje się rozmówca. Na przykład nowa instancja aktywności uruchomiona z programu uruchamiającego powinna być umieszczana na tym samym wyświetlaczu bez dodatkowych flag ani opcji. Pamiętaj, aby używać odpowiedniego kontekstu (aktywność lub aplikacja) podczas uruchamiania.
- Jeśli uruchomienie następuje ze źródła niezwiązanego z konkretnym wyświetlaczem (np. z powłoki lub kontekstu aplikacji), działanie jest umieszczane na wyświetlaczu, na którym użytkownik ostatnio wchodził w interakcję z urządzeniem lub z którego uruchomiono ostatnie działanie.
- Zamiar uruchomienia działania może zostać przekierowany do istniejącej instancji działania w systemie. W takim przypadku, jeśli nie podano dodatkowych flag, aktywność pojawi się na tym samym wyświetlaczu, na którym była ostatnio używana. Jeśli wyświetlacz docelowy jest określony za pomocą
ActivityOptions#setTargetDisplayId(), aktywność jest przenoszona na ten wyświetlacz (jeśli zezwalają na to zabezpieczenia i inne ograniczenia).
Ograniczenia zabezpieczeń
Aby zapobiec przywłaszczaniu przez złośliwe aplikacje informacji wrażliwych użytkownika poprzez odczytywanie ich z powierzchni utworzonego przez nie wirtualnego wyświetlacza, aplikacje mogą uruchamiać własne działania tylko na utworzonym przez siebie wirtualnym wyświetlaczu w Androidzie 10. Jednak:
- Komponenty systemu z uprawnieniem
INTERNAL_SYSTEM_WINDOWmogą być uruchamiane na dowolnym wyświetlaczu. - Dzwoniący z uprawnieniem
ACTIVITY_EMBEDDINGmogą uruchamiać aktywności z innych aplikacji, które mają flagęActivityInfo.FLAG_ALLOW_EMBEDDED. - Uruchamianie aktywności na wyświetlaczach prywatnych jest dozwolone tylko w przypadku właściciela lub aktywności obecnych na tym wyświetlaczu.
Podobne ograniczenia dotyczą dodawania okien do wyświetlaczy.
Android 10 zawiera metodę ActivityManager#isActivityStartAllowedOnDisplay(Context context, int
displayId, Intent intent), która umożliwia sprawdzenie ograniczeń bezpieczeństwa aplikacji przed próbą uruchomienia jej na wyświetlaczu. W Androidzie 9 (i starszych wersjach) uruchomienie z ograniczeniami powoduje zgłoszenie wyjątku SecurityException.
Większość ograniczeń bezpieczeństwa jest stosowana w metodzie
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().