O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando Gerenciamento de Dispositivos

Esta seção descreve como habilitar e validar os recursos de gerenciamento de dispositivos necessários para preparar dispositivos para perfis gerenciados. Ele também cobre casos de usuários proprietários de dispositivos essenciais em um ambiente corporativo.

Além do código AOSP, um dispositivo requer os seguintes componentes para funcionar com perfis gerenciados.

Requerimentos gerais

Os dispositivos que pretendem oferecer suporte ao gerenciamento de dispositivos devem atender aos seguintes requisitos gerais.

Valores térmicos de HAL

O Android 7.0 e posterior inclui suporte para HardwarePropertiesManager API, uma API de monitoramento de dispositivos e relatórios de integridade que permite que os aplicativos consultem o estado do hardware do dispositivo. Esta API é exposta através android.os.HardwarePropertiesManager e faz chamadas através HardwarePropertiesManagerService ao HAL hardware térmica ( hardware/libhardware/include/hardware/thermal.h ). É uma API protegida, ou seja, aplicações único dispositivo / profile proprietário do dispositivo Policy Controller (DPC) e da corrente VrListenerService pode chamá-lo.

Para oferecer suporte à API HardwarePropertiesManager, a implementação de HAL térmica do dispositivo deve ser capaz de relatar os seguintes valores:

Valor Escala de Relatório Possibilita
Temperatura de [CPU | GPU | Bateria | Pele do dispositivo] Temperatura do componente em graus Celsius Os aplicativos podem verificar as temperaturas do dispositivo e as temperaturas de limitação / desligamento dos componentes
CPU ativa / tempo total habilitado Tempo em milissegundos Os aplicativos podem verificar o uso da CPU por núcleo
Velocidade do ventilador RPM Os aplicativos podem verificar a velocidade do ventilador

As implementações devem lidar corretamente com situações de valores de relatório quando um núcleo (ou GPU, bateria, ventilador) fica offline ou é conectado / desconectado.

Habilitando o gerenciamento de dispositivos

Para ativar o gerenciamento de dispositivos, certifique-se os seguintes uses-features são declaradas:

  • android.software.device_admin
  • android.software.managed_users (recurso é declarado se e somente se o dispositivo tem pelo menos 2 GB de memória.)

Para confirmar estes uses-feature valores foram declarados em um dispositivo, execute: adb shell pm list features .

Apps essenciais apenas

Por padrão, apenas os aplicativos essenciais para a operação correta do perfil são ativados como parte do provisionamento de um dispositivo gerenciado. Tenha em mente, todas as instâncias exemplo de _managed_profile.xml arquivos abaixo são apenas relevante se android.software.managed_users é declarada. Os OEMs devem garantir que o perfil ou dispositivo gerenciado tenha todos os aplicativos necessários, 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

Aplicativos necessários e não permitidos para usuários gerenciados são aplicadas a usuários secundários criados via DevicePolicyManager#createAndManageUser .

Exemplos de um dispositivo Nexus

Android 8.x e anterior

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

Android 9 e superior

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 e anterior

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

Android 9 e superior

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>

Requisitos do lançador

Você deve atualizar o Launcher para suportar aplicativos de crachá com o emblema do ícone (fornecido no AOSP para representar os aplicativos gerenciados) e outros elementos da interface do usuário do emblema, como recentes e notificações. Se você usar launcher3 em AOSP sem modificações, então você provavelmente já suportam esta funcionalidade badging.

Requisitos NFC

Dispositivos com NFC devem habilitar NFC durante a experiência pronta para uso (ou seja, assistente de configuração) e ser configurados para aceitar intents de provisionamento gerenciado:

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

Requisitos de configuração

Dispositivos que incluem uma experiência pronta para uso (isto é, assistente de configuração) devem implementar o provisionamento do proprietário do dispositivo. Quando a experiência pronta para uso é aberta, ela deve verificar se outro processo (como o provisionamento do proprietário do dispositivo) já concluiu a configuração do usuário e, em caso afirmativo, deve disparar uma intenção inicial e finalizar a configuração. Essa intenção é capturada pelo aplicativo de provisionamento, que então passa o controle para o proprietário do dispositivo recém-configurado.

Para atender aos requisitos de configuração, adicione o seguinte código à atividade principal de configuração do 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();
       }

       ...
   }