Pratiques recommandées

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 :