Applis pour appareils pliables et multi-écrans
En règle générale, les applications ne doivent pas s'appuyer sur des identifiants statiques ou une logique qui dépend certains ID à afficher. Dans la plupart des cas, les applications devraient être redimensionnées et fonctionner sur des écrans différents. et le système doit contrôler l'emplacement des applications. Par exemple, pour créer expérience unique pour les appareils pliables et lancement d'une application spéciale sur le écran externe lorsque l'appareil est plié.
Dans ce cas, SystemUI (ou un autre composant système) doit détecter plier, déterminez s'il est approprié d'effectuer une action, puis lancez une activité cible et spécifiez un ID d'écran externe comme cible de lancement. Les applis ne doivent pas détecter cette action ni effectuer d'action en réponse, puis effectuer le lancement sur un écran spécifique. Autrement dit, ne partez pas du principe que ce qui fonctionne sur un appareil le fonctionnera sur d'autres. Pour résumer, les spécificités de chaque appareil augmente la fragmentation.
Restreindre l'accès aux écrans
Si la configuration de l'appareil nécessite une restriction d'accès à un ou plusieurs
s'affiche, il est recommandé d'utiliser l'option Display#FLAG_PRIVATE
.
pour désigner ces écrans comme privés. Cela permet de restreindre
d'ajouter du contenu à l'écran. Toute tentative de lancement d'une activité
ajouter une fenêtre par n'importe qui, mais le propriétaire génère une SecurityException
.
Si le système est propriétaire de l'écran, il peut ajouter des fenêtres et lancer des activités.
De plus, les entités placées sur un écran peuvent toujours y accéder. Si le propriétaire lance une activité sur un écran, celle-ci peut lancer d'autres activités sur cet écran. Par conséquent, le propriétaire est chargé de restreindre et en autorisant uniquement les applications approuvées.
De plus, d'autres restrictions sont ajoutées aux écrans virtuels, car toute application peut
créer un sans le
rendre visible à l'utilisateur. Si l'écran virtuel n'est pas
appartenant au système, seules les activités avec
allowEmbedded
sont autorisées, et l'appelant doit disposer du rôle ACTIVITY_EMBEDDING
l'autorisation.
Pour en savoir plus, voir :
ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
ActivityDisplay#isUidPresent()
DisplayManagerService#isUidPresentOnDisplay()
Pour contrôler le lancement d'une activité de manière conditionnelle, utilisez LaunchParamsController
.
qui intercepte tous les lancements d'activité et permet à un composant système de modifier le
des paramètres utilisés pour le lancement. Disponible dans system_server
.
Configurer les paramètres de fenêtrage d'affichage et les décorations système
Les décorations système peuvent
être configurés par écran dans DisplayWindowSettings
. Un appareil
peut fournir une configuration par défaut
/data/system/display_settings.xml
Cette valeur détermine si les décorations
système (lanceur, fond d'écran,
la barre de navigation et d'autres fenêtres de décoration) et l'IME s'affichent sur un écran.
Pour en savoir plus, consultez DisplayWindowSettings#shouldShowSystemDecorsLocked()
et DisplayWindowSettings#shouldShowImeLocked()
.
Pour identifier l'écran, utilisez un identifiant unique (par défaut,
DisplayInfo#uniqueId
) ou un ID de port physique pour le matériel
s'affiche (voir DisplayInfo#address
).
Par exemple, l'exemple de configuration d'affichage suivant active les décorations système et IME sur un affichage simulé:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <display-settings> <config identifier="0" /> <display name="overlay:1" shouldShowSystemDecors="true" shouldShowIme="true" /> </display-settings>
Dans l'exemple ci-dessus, uniqueId
est utilisé pour l'identification des écrans.
dans l'attribut "name", qui correspond à overlay:1
pour un affichage simulé.
Pour un écran intégré, vous pouvez par exemple utiliser "local:45354385242535243453"
.
Une autre option consiste à utiliser les informations du port matériel et à définir identifier="1"
pour qu'elle corresponde à DisplayWindowSettings#IDENTIFIER_PORT
, puis mettez à jour
pour utiliser le format "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>
Pour en savoir plus, consultez la section Identifiants d'affichage statique.
Pour en savoir plus, voir :
- Paramètres de la fenêtre d'affichage
- Identifiants d'affichage statique
- Compatibilité avec les décorations système