Zasady dotyczące uruchamiania aktywności

Zachowanie podczas uruchamiania aktywności jest definiowane przez tryby uruchamiania w plikach AndroidManifest.xml aplikacji, flagach intencji i opcjach ActivityOptions podanych przez wywołującego. Użyj ActivityOption#setLaunchDisplayId(int), aby ustawić wyświetlanie konkretnej reklamy na potrzeby uruchamiania aktywności.

  • Domyślnie aktywność uruchamia się na tym samym ekranie co wywołujący. Na przykład nowy egzemplarz aktywności uruchomionej z poziomu menu powinno się umieścić na tym samym ekranie bez dodatkowych flag lub opcji. Pamiętaj, aby podczas uruchamiania używać właściwego kontekstu (czynność lub aplikacja).
  • Jeśli uruchomienie zostało wykonane ze źródła, które nie jest powiązane z konkretnym wyświetlaczem (np. z otoczki lub kontekstu aplikacji), aktywność zostanie umieszczona na górnym wyświetlaczu, na którym użytkownik ostatnio wszedł w interakcję z urządzeniem lub z którego została uruchomiona ostatnia aktywność.
  • Intencja uruchomienia aktywności może być rozwiązywana jako istniejąca aktywność w systemie. W takim przypadku, jeśli nie zostały podane żadne dodatkowe flagi, aktywność pojawi się na tym samym ekranie, na którym była ostatnio używana. Jeśli wyświetlacz docelowy jest określony za pomocą parametru ActivityOptions#setTargetDisplayId(), aktywność jest przenoszona na ten wyświetlacz (jeśli jest to dozwolone przez zabezpieczenia i inne ograniczenia).

Ograniczenia zabezpieczeń

Aby uniemożliwić złośliwej aplikacji nieprawidłowe wykorzystanie poufnych informacji użytkownika przez odczytanie ich z powierzchni utworzonego przez nią wirtualnego wyświetlacza, aplikacje mogą uruchamiać własne działania tylko na utworzonym przez siebie wirtualnym wyświetlaczu w Androidzie 10. Jednak:

  • Komponenty systemowe z uprawnieniem INTERNAL_SYSTEM_WINDOW mogą być uruchamiane na dowolnym wyświetlaczu.
  • Osoby dzwoniące z uprawnieniami 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 dla 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ń zabezpieczeń aplikacji przed próbą uruchomienia jej na wyświetlaczu. W Androidzie 9 (i starszych) ograniczone uruchamianie powoduje błąd SecurityException.

Większość ograniczeń bezpieczeństwa jest stosowanych w przypadku metody ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay().