Zalecane metody

Aplikacje na urządzenia składane i z wieloma ekranami

Ogólnie rzecz biorąc, aplikacje nie powinny opierać się na statycznych identyfikatorach ani funkcjach logicznych uzależnionych od tego, niektóre wyświetlane identyfikatory. W większości przypadków aplikacje powinny zmieniać rozmiar i działać na różnych wyświetlaczach. a system powinien kontrolować, gdzie znajdują się aplikacje. Aby na przykład utworzyć nową, wyjątkową funkcję na urządzenia składane i uruchom specjalną aplikację na zewnętrznego ekranu po złożeniu urządzenia.

W takim przypadku interfejs SystemUI (lub inny komponent systemu) powinien wykryć określić, czy dane działanie jest odpowiednie, a następnie uruchomić jako aktywność docelową, a jako cel uruchamiania podaj identyfikator wyświetlania zewnętrznego. Aplikacje nie powinny wykrywać tego działania ani wykonywać żadnych działań, a następnie uruchamiają ją na konkretnym wyświetlaczu. Innymi słowy, nie zakładaj, że To, co działa na jednym urządzeniu, będzie działać na innych. Krótko mówiąc, ustawienia zwiększa fragmentację kodu.

Ogranicz dostęp do wyświetlaczy

Jeśli konfiguracja urządzenia wymaga ograniczenia dostępu do co najmniej jednego zalecamy użycie flagi Display#FLAG_PRIVATE oznaczanie takich ekranów jako prywatne. Ograniczy to wyłącznie przez właściciela treści. Każda próba rozpoczęcia działania lub dodanie okna przez dowolnego użytkownika oprócz właściciela powoduje wyświetlenie okna SecurityException. Jeśli system jest właścicielem ekranu, może dodawać okna i uruchamiać działania.

Dodatkowo elementy umieszczone na wyświetlaczu zawsze mają do niego dostęp. Jeśli właściciel uruchomi działanie na wyświetlaczu, może ono uruchomić inne na tym ekranie. W związku z tym właściciel jest odpowiedzialny za ograniczenie dostępu i zezwalania tylko na zaufane aplikacje.

Dodaliśmy też więcej ograniczeń do wyświetlaczy wirtualnych, ponieważ utwórz je bez wyświetlania ich użytkownikowi. Jeśli wyświetlacz wirtualny nie jest należące do systemu, to jedynie działania z allowEmbedded są dozwolone, a element wywołujący powinien mieć parametr ACTIVITY_EMBEDDING uprawnienia.

Więcej informacji znajdziesz w tych artykułach:

  • ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
  • ActivityDisplay#isUidPresent()
  • DisplayManagerService#isUidPresentOnDisplay()

Aby warunkowo kontrolować uruchamianie aktywności, użyj funkcji LaunchParamsController, przechwytuje całą uruchamianą aktywność i pozwala komponentowi systemu modyfikować parametrów używanych do uruchomienia. Ta funkcja jest dostępna w języku: system_server.

Skonfiguruj ustawienia okna wyświetlania i dekoracje systemowe

Dekoracje systemowe mogą dla danego wyświetlacza w narzędziu DisplayWindowSettings. Urządzenie może zapewnić domyślną konfigurację /data/system/display_settings.xml

Ta wartość określa, czy dekoracje systemowe (program uruchamiający, tapeta, pasek nawigacyjny i okna innych dekoracji) oraz edytor IME pojawią się na wyświetlaczu. Więcej informacji: DisplayWindowSettings#shouldShowSystemDecorsLocked() i DisplayWindowSettings#shouldShowImeLocked().

Aby zidentyfikować wyświetlacz, użyj unikalnego identyfikatora (domyślnie używany jest DisplayInfo#uniqueId) lub fizyczny identyfikator portu sprzętowego. (patrz DisplayInfo#address).

Na przykład ten przykład konfiguracji wyświetlania włącza dekoracje systemowe, IME na symulowanym wyświetlaczu:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="0" />
<display
  name="overlay:1"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

W powyższym przykładzie do identyfikacji wyświetlacza używana jest uniqueId. w atrybucie „name”, który w przypadku symulowanego wyświetlania ma wartość overlay:1. W przypadku wbudowanego wyświetlacza przykładowa wartość może wynosić "local:45354385242535243453". Możesz też użyć informacji o porcie sprzętowym i ustawić identifier="1" aby odpowiadał DisplayWindowSettings#IDENTIFIER_PORT, a następnie zaktualizuj nazwa, by użyć formatu "port:<port_id>":

<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="1" />
<display
  name="port:12345"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

Więcej informacji znajdziesz w artykule Statyczne identyfikatory wyświetlania.

Więcej informacji znajdziesz w tych artykułach: