Zachowanie podczas uruchamiania aktywności jest definiowane przez tryby uruchamiania w plikach AndroidManifest.xml
aplikacji, flagi intencji i opcji ActivityOptions przekazanych przez wywołującego. Użyj właściwości ActivityOption#setLaunchDisplayId(int)
, aby ustawić kierowanie na określone wyświetlanie związane z uruchomieniem działania.
- 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 uruchamianie odbywa się ze źródła, które nie jest powiązane z określonym wyświetlaczem (np. z otoczki lub kontekstu aplikacji), aktywność jest umieszczana 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 przez istniejący w systemie przypadek użycia aktywności. 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 docelowy wyświetlacz jest określony za pomocą parametru
ActivityOptions#setTargetDisplayId()
, aktywność jest przenoszona na ten wyświetlacz (jeśli jest to dozwolone ze względu na 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 uprawnieniami
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
. - Aktywność na wyświetlaczach prywatnych jest dozwolona tylko dla właściciela lub w przypadku określonych na nim czynności.
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()
.