Zasady dotyczące uruchamiania aktywności

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_WINDOW mogą być uruchamiane na dowolnym wyświetlaczu.
  • Dzwoniący z uprawnieniem ACTIVITY_EMBEDDING mogą 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().