Apps für faltbare Geräte und Multiscreen-Geräte
Im Allgemeinen sollten Apps nicht auf statischen Kennungen oder einer Logik basieren, die einige Display-IDs. Meistens sollten Apps ihre Größe anpassen und 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) das um zu ermitteln, ob eine Aktion angemessen ist, und starten Sie 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: erhöht die Fragmentierung.
Zugriff auf Displays beschränken
Wenn die Gerätekonfiguration den Zugriff auf ein oder mehrere Displays einschränken muss, sollten Sie diese Displays mit dem Flag Display#FLAG_PRIVATE
als privat kennzeichnen. Dadurch können nur der Eigentümer und Nutzer mit der entsprechenden Berechtigung Inhalte zum Display hinzufügen. Alle Versuche, eine Aktivität zu starten oder ein Fenster hinzuzufügen, die nicht vom Eigentümer stammen, führen zu einer SecurityException
.
Wenn das System Inhaber des Displays ist, kann es 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 werden virtuelle Anzeigen mit weiteren Einschränkungen versehen, da jede App
ohne es für Nutzende sichtbar zu machen. Wenn das virtuelle Display nicht dem System gehört, sind nur Aktivitäten mit allowEmbedded
zulässig und der Aufrufer muss die Berechtigung ACTIVITY_EMBEDDING
haben.
Weitere Informationen
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
ActivityDisplay#isUidPresent()
DisplayManagerService#isUidPresentOnDisplay()
Wenn Sie den Start von Aktivitäten bedingt steuern möchten, verwenden Sie LaunchParamsController
. Damit werden alle Aktivitätsstarts abgefangen und einer Systemkomponente wird ermöglicht, die für den Start verwendeten Parameter zu ändern. Diese Funktion ist in system_server
verfügbar.
Einstellungen für Fenster und Systemdekorationen 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 eine eindeutige ID. Bei dieser Standardeinstellung wird
DisplayInfo#uniqueId
) oder eine physische Port-ID für Hardware
angezeigt wird (siehe DisplayInfo#address
).
Im folgenden Beispiel für eine Displaykonfiguration sind Systemdekorationen und die IME auf einem simulierten Display aktiviert:
<?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 Displays verwendet.
im Attribut „name“, das für eine simulierte Anzeige overlay:1
ist.
Bei einem integrierten Display kann "local:45354385242535243453"
ein Beispielwert sein.
Eine weitere Option besteht darin, Hardware-Portinformationen zu verwenden und identifier="1"
so festzulegen, dass es mit DisplayWindowSettings#IDENTIFIER_PORT
übereinstimmt. Aktualisieren Sie dann den Namen im "port:<port_id>"
-Format:
<?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