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