Apps für faltbare Geräte und Multiscreen-Geräte
Im Allgemeinen sollten Apps nicht auf statischen Kennungen oder einer Logik basieren, die von einige Display-IDs. In den meisten Fällen sollte die Größe von Apps angepasst werden, damit sie auf verschiedenen Displays funktionieren. und das System steuert, wo Apps gefunden werden. Um beispielsweise eine für faltbare Geräte und eine spezielle App auf der externen Bildschirm, wenn das Gerät zugeklappt ist.
In diesem Fall sollte die SystemUI (oder eine andere Systemkomponente) die Seite zu öffnen, zu bestimmen, ob eine Aktion angemessen ist, und Zielaktivität fest und gib eine externe Display-ID als Startziel an. Apps dürfen diese Aktion nicht erkennen oder darauf reagieren. um den Start auf einem bestimmten Display durchzuführen. Mit anderen Worten: Gehen Sie nicht davon aus, was auf einem Gerät funktioniert, auch auf anderen Geräten. Kurz gesagt: Code erhöht die Fragmentierung.
Zugriff auf Displays beschränken
Ob der Zugriff aufgrund der Gerätekonfiguration auf eine oder mehrere
angezeigt wird, empfiehlt es sich, das Flag Display#FLAG_PRIVATE
zu verwenden
um solche Displays als privat zu kennzeichnen. Dadurch werden alle
dem Display Inhalte hinzufügen kann. Jeder Versuch, eine Aktivität zu starten
Fenster nur vom Eigentümer hinzufügen, ergibt sich ein SecurityException
.
Wenn das Display dem System gehört, kann das System Fenster hinzufügen und Aktivitäten starten.
Darüber hinaus können Elemente auf einem Bildschirm immer auf diesen Bildschirm zugreifen. Wenn der Eigentümer eine Aktivität auf einem Display startet, kann die Aktivität andere Aktivitäten auf diesem Display. Daher ist der Inhaber dafür verantwortlich, nur vertrauenswürdige Apps.
Darüber hinaus gibt es für virtuelle Displays weitere Einschränkungen, da jede App
ohne es für Nutzende sichtbar zu machen. Wenn die virtuelle Anzeige nicht
gehören, dann werden nur Aktivitäten mit
allowEmbedded
sind zulässig und der Aufrufer sollte die ACTIVITY_EMBEDDING
Berechtigung.
Weitere Informationen
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
ActivityDisplay#isUidPresent()
DisplayManagerService#isUidPresentOnDisplay()
Wenn Sie Aktivitätsstarts bedingt steuern möchten, verwenden Sie LaunchParamsController
,
das alle Aktivitätsstarts abfängt und es einer Systemkomponente ermöglicht,
Parameter, die für den Start verwendet werden. Dies ist in system_server
verfügbar.
Einstellungen für die Fensteranzeige und die Systemgestaltung konfigurieren
Systemdesigns können
kann für die einzelnen Displays in DisplayWindowSettings
konfiguriert werden. Ein Gerät
kann die Implementierung eine Standardkonfiguration
/data/system/display_settings.xml
Dieser Wert bestimmt, ob die Systemeinrichtung (Launcher, Hintergrund,
Navigationsleiste und andere Dekorfenster) und der IME wird auf dem Display angezeigt.
Weitere Informationen finden Sie unter DisplayWindowSettings#shouldShowSystemDecorsLocked()
.
und DisplayWindowSettings#shouldShowImeLocked()
.
Verwenden Sie zur Identifizierung des Displays entweder eine eindeutige ID (diese Standardeinstellung verwendet
DisplayInfo#uniqueId
) oder eine physische Port-ID für Hardware
angezeigt wird (siehe DisplayInfo#address
).
Mit dem folgenden Beispiel für die Anzeigekonfiguration werden Systemdesigns und die IME auf einem simulierten Display:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="0" /> <display name="overlay:1" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
Im Beispiel oben wird uniqueId
zur Identifizierung von Displayanzeigen verwendet.
im Attribut „name“, das für eine simulierte Anzeige overlay:1
ist.
Bei einem integrierten Display kann ein Beispielwert "local:45354385242535243453"
sein.
Sie können auch Informationen zum Hardwareport verwenden und identifier="1"
festlegen
um DisplayWindowSettings#IDENTIFIER_PORT
zu entsprechen, und aktualisieren Sie dann
Name, um das Format "port:<port_id>"
zu verwenden:
<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="1" /> <display name="port:12345" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
Weitere Informationen finden Sie unter Statische Anzeige-IDs.
Weitere Informationen