Mise en œuvre de la gestion des périphériques

Cette section décrit comment activer et valider les fonctionnalités de gestion des appareils requises pour préparer les appareils aux profils gérés. Il couvre également les cas d'utilisation des propriétaires d'appareils qui sont essentiels dans un environnement d'entreprise.

Outre le code AOSP, un appareil nécessite les composants suivants pour fonctionner avec les profils gérés.

Exigences générales

Les appareils destinés à prendre en charge la gestion des appareils doivent répondre aux exigences générales suivantes.

Valeurs HAL thermiques

Android 7.0 et versions ultérieures incluent la prise en charge de l'API HardwarePropertiesManager, une API de surveillance des appareils et de rapport d'intégrité qui permet aux applications d'interroger l'état du matériel de l'appareil. Cette API est exposée via android.os.HardwarePropertiesManager et effectue des appels via HardwarePropertiesManagerService vers le matériel thermique HAL ( hardware/libhardware/include/hardware/thermal.h ). Il s'agit d'une API protégée, ce qui signifie que seules les applications Device Policy Controller (DPC) du propriétaire de l'appareil/du profil et le VrListenerService actuel peuvent l'appeler.

Pour prendre en charge l'API HardwarePropertiesManager, l'implémentation HAL thermique de l'appareil doit pouvoir signaler les valeurs suivantes :

Évaluer Échelle de déclaration Active
Température de [CPU|GPU|Batterie|Peau de l'appareil] Température du composant en degrés Celsius Les applications peuvent vérifier les températures de l'appareil et les températures d'étranglement/d'arrêt des composants
CPU actif/total des temps activés Temps en millisecondes Les applications peuvent vérifier l'utilisation du processeur par cœur
Vitesse du ventilateur RPM Les applications peuvent vérifier la vitesse du ventilateur

Les implémentations doivent gérer correctement les situations de rapports de valeurs lorsqu'un cœur (ou GPU, batterie, ventilateur) se déconnecte ou est branché/débranché.

Activation de la gestion des appareils

Pour activer la gestion des appareils, assurez-vous que les fonctionnalités uses-features suivantes sont déclarées :

  • android.software.device_admin
  • android.software.managed_users (la fonctionnalité est déclarée si et seulement si l'appareil dispose d'au moins 2 Go de mémoire.)

Pour confirmer que ces valeurs uses-feature ont été déclarées sur un appareil, exécutez : adb shell pm list features .

Applications essentielles uniquement

Par défaut, seules les applications essentielles au bon fonctionnement du profil sont activées dans le cadre du provisionnement d'un appareil géré. Gardez à l'esprit que tous les exemples d'instances de fichiers _managed_profile.xml ci-dessous ne sont pertinents que si android.software.managed_users est déclaré. Les OEM doivent s'assurer que le profil ou l'appareil géré dispose de toutes les applications requises en modifiant :

vendor_required_apps_managed_profile.xml
vendor_required_apps_managed_device.xml
vendor_disallowed_apps_managed_profile.xml
vendor_disallowed_apps_managed_device.xml
/*
 * The following are for Android 9 and higher only
 */
vendor_required_apps_managed_user.xml
vendor_disallowed_apps_managed_user.xml

Les applications requises et non autorisées pour les utilisateurs gérés sont appliquées aux utilisateurs secondaires créés via DevicePolicyManager#createAndManageUser .

Exemples d'un appareil Nexus

Android 8.x et versions antérieures

pacakages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml

Android 9 et supérieur

frameworks/base/core/res/res/values/vendor_required_apps_managed_device.xml
<resources>
  <!-- A list of apps to be retained on the managed device -->
  <string-array name="vendor_required_apps_managed_device">
    <item>com.android.vending</item> <!--­Google Play -->
    <item>com.google.android.gms</item> <!--­Required by Play -->
    <item>com.google.android.contacts</item> <!--­Google or OEM Contacts­-->
    <item>com.google.android.googlequicksearchbox</item> <!--­Google Launcher -->
    <item>com.google.android.launcher</item> <!--­Google Launcher or OEM Launcher -->
    <item>com.google.android.dialer</item> <!--­Google or OEM dialer to enable making phone calls -->
  </string-array>
</resources>

Android 8.x et versions antérieures

packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml

Android 9 et supérieur

frameworks/base/core/res/res/values/vendor_required_apps_managed_profile.xml
<resources>
    <!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. -->
    <string-array name="vendor_required_apps_managed_profile">
        <item>com.android.vending</item> <!-- Google Play -->
        <item>com.google.android.gms</item> <!-- Required by Play -->
        <item>com.google.android.contacts</item> <!-- Google or OEM Contacts -->
    </string-array>
</resources>

Exigences du lanceur

Vous devez mettre à jour le lanceur pour prendre en charge les applications de badge avec le badge d'icône (fourni dans AOSP pour représenter les applications gérées) et d'autres éléments d'interface utilisateur de badge tels que les événements récents et les notifications. Si vous utilisez launcher3 dans AOSP sans modifications, vous prenez probablement déjà en charge cette fonctionnalité de badge.

Exigences NFC

Les appareils avec NFC doivent activer NFC pendant l'expérience prête à l'emploi (c'est-à-dire l'assistant de configuration) et être configurés pour accepter les intentions de provisionnement géré :

packages/apps/Nfc/res/values/provisioning.xml
<bool name="enable_nfc_provisioning">true</bool>
<item>application/com.android.managedprovisioning</item>

Configuration requise

Les appareils qui incluent une expérience prête à l'emploi (c'est-à-dire un assistant de configuration) doivent implémenter le provisionnement du propriétaire de l'appareil. Lorsque l'expérience prête à l'emploi s'ouvre, elle doit vérifier si un autre processus (tel que l'approvisionnement du propriétaire de l'appareil) a déjà terminé la configuration de l'utilisateur et, si c'est le cas, elle doit déclencher une intention d'accueil et terminer la configuration. Cette intention est détectée par l'application d'approvisionnement, qui passe ensuite le contrôle au propriétaire de l'appareil nouvellement défini.

Pour répondre aux exigences de configuration, ajoutez le code suivant à l'activité principale de configuration de l'appareil :

@Override
   protected void onStart() {
        super.onStart();

        // When returning to a setup wizard activity, check to see if another setup process
        // has intervened and, if so, complete an orderly exit
        boolean completed = Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.USER_SETUP_COMPLETE, 0) != 0;
        if (completed) {
           startActivity(new Intent(Intent.ACTION_MAIN, null)
                .addCategory(Intent.CATEGORY_HOME)
                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK
                        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED));
           finish();
       }

       ...
   }