Implementazione della gestione dei dispositivi

Questa sezione descrive come abilitare e convalidare le funzioni di gestione dei dispositivi necessarie per preparare i dispositivi per i profili gestiti. Copre anche i casi degli utenti dei proprietari dei dispositivi che sono essenziali in un ambiente aziendale.

Oltre al codice AOSP, un dispositivo richiede i seguenti componenti per funzionare con i profili gestiti.

Requisiti generali

I dispositivi che intendono supportare la gestione dei dispositivi devono soddisfare i seguenti requisiti generali.

Valori HAL termici

Android 7.0 e versioni successive includono il supporto per l'API HardwarePropertiesManager, un'API per il monitoraggio del dispositivo e la segnalazione dello stato che consente alle applicazioni di interrogare lo stato dell'hardware del dispositivo. Questa API è esposta tramite android.os.HardwarePropertiesManager ed effettua chiamate tramite HardwarePropertiesManagerService all'HAL termico hardware ( hardware/libhardware/include/hardware/thermal.h ). È un'API protetta, il che significa che solo le applicazioni Device Policy Controller (DPC) del proprietario del dispositivo/profilo e l'attuale VrListenerService possono chiamarla.

Per supportare l'API HardwarePropertiesManager, l'implementazione HAL termica del dispositivo deve essere in grado di riportare i seguenti valori:

Valore Scala di segnalazione Consente
Temperatura di [CPU|GPU|Batteria|Skin del dispositivo] Temperatura del componente in gradi Celsius Le app possono controllare le temperature del dispositivo e le temperature di limitazione/spegnimento dei componenti
CPU attiva/tempi abilitati totali Tempo in millisecondi Le app possono controllare l'utilizzo della CPU per core
Velocità della ventola RPM Le app possono controllare la velocità della ventola

Le implementazioni dovrebbero gestire correttamente le situazioni dei valori di segnalazione quando un core (o GPU, batteria, ventola) va offline o è collegato/scollegato.

Abilitazione della gestione dei dispositivi

Per abilitare la gestione dei dispositivi, assicurati che siano dichiarate le seguenti uses-features :

  • android.software.device_admin
  • android.software.managed_users (la funzionalità viene dichiarata se e solo se il dispositivo ha almeno 2 GB di memoria.)

Per confermare che questi valori uses-feature sono stati dichiarati su un dispositivo, eseguire: adb shell pm list features .

Solo app essenziali

Per impostazione predefinita, solo le applicazioni essenziali per il corretto funzionamento del profilo sono abilitate nell'ambito del provisioning di un dispositivo gestito. Tieni presente che tutte le istanze di esempio dei file _managed_profile.xml di seguito sono rilevanti solo se è dichiarato android.software.managed_users . Gli OEM devono garantire che il profilo o il dispositivo gestito disponga di tutte le applicazioni richieste modificando:

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

Le app obbligatorie e non consentite per gli utenti gestiti vengono applicate agli utenti secondari creati tramite DevicePolicyManager#createAndManageUser .

Esempi da un dispositivo Nexus

Android 8.xe precedenti

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

Android 9 e versioni successive

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.xe precedenti

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

Android 9 e versioni successive

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>

Requisiti del lanciatore

È necessario aggiornare il programma di avvio per supportare le applicazioni di badge con il badge icona (fornito in AOSP per rappresentare le applicazioni gestite) e altri elementi dell'interfaccia utente del badge come i recenti e le notifiche. Se utilizzi launcher3 in AOSP senza modifiche, probabilmente supporterai già questa funzione di badge.

Requisiti NFC

I dispositivi con NFC devono abilitare NFC durante l'esperienza predefinita (ad esempio, la procedura guidata di configurazione) ed essere configurati per accettare gli intenti di provisioning gestito:

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

Requisiti di installazione

I dispositivi che includono un'esperienza predefinita (ad esempio, la procedura guidata di configurazione) devono implementare il provisioning del proprietario del dispositivo. Quando si apre l'esperienza predefinita, dovrebbe verificare se un altro processo (come il provisioning del proprietario del dispositivo) ha già completato la configurazione dell'utente e, in tal caso, dovrebbe attivare un intento home e completare la configurazione. Questa intenzione viene catturata dall'applicazione di provisioning, che passa quindi il controllo al proprietario del dispositivo appena impostato.

Per soddisfare i requisiti di configurazione, aggiungi il codice seguente all'attività principale della configurazione del dispositivo:

@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();
       }

       ...
   }