Внедрение управления устройствами

В этом разделе описывается, как включить и проверить функции управления устройствами, необходимые для подготовки устройств к управляемым профилям. Он также охватывает пользовательские случаи владельцев устройств, которые необходимы в корпоративной среде.

В дополнение к коду AOSP устройству требуются следующие компоненты для работы с управляемыми профилями.

Общие требования

Устройства, предназначенные для поддержки управления устройствами, должны соответствовать следующим общим требованиям.

Тепловые значения HAL

Android 7.0 и более поздние версии включают поддержку API HardwarePropertiesManager, API мониторинга устройств и отчетов о работоспособности, который позволяет приложениям запрашивать состояние оборудования устройства. Этот API предоставляется через android.os.HardwarePropertiesManager и через HardwarePropertiesManagerService вызывает аппаратный термальный HAL ( hardware/libhardware/include/hardware/thermal.h ). Это защищенный API, что означает, что его могут вызывать только приложения Device Policy Controller (DPC) владельца устройства/профиля и текущая VrListenerService .

Для поддержки API HardwarePropertiesManager реализация теплового HAL устройства должна иметь возможность сообщать следующие значения:

Ценность Шкала отчетности Включает
Температура [CPU|GPU|Battery|Device Skin] Температура компонента в градусах Цельсия Приложения могут проверять температуру устройства и температуру дросселирования/выключения компонентов.
ЦП активен/общее время работы Время в миллисекундах Приложения могут проверять загрузку ЦП по ядрам
Скорость вентилятора об/мин Приложения могут проверять скорость вращения вентилятора

Реализации должны правильно обрабатывать ситуации со значениями отчетов, когда ядро ​​(или графический процессор, батарея, вентилятор) отключается или подключается/отключается.

Включение управления устройствами

Чтобы включить управление устройством, убедитесь, что объявлены следующие uses-features :

  • android.software.device_admin
  • android.software.managed_users (функция объявляется тогда и только тогда, когда на устройстве есть не менее 2 ГБ памяти.)

Чтобы подтвердить, что эти значения свойств uses-feature были объявлены на устройстве, запустите: adb shell pm list features .

Только основные приложения

По умолчанию в процессе подготовки управляемого устройства включаются только приложения, необходимые для правильной работы профиля. Имейте в виду, что все приведенные ниже примеры файлов _managed_profile.xml актуальны только в том случае, если объявлено android.software.managed_users . OEM-производители должны убедиться, что в управляемом профиле или устройстве есть все необходимые приложения, изменив:

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

Обязательные и запрещенные приложения для управляемых пользователей применяются к дополнительным пользователям, созданным с помощью DevicePolicyManager#createAndManageUser .

Примеры с устройства Nexus

Android 8.x и более ранние версии

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

Андроид 9 и выше

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 и более ранние версии

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

Андроид 9 и выше

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>

Требования к лаунчеру

Вы должны обновить Launcher, чтобы он поддерживал приложения со значком значка (предоставляется в AOSP для представления управляемых приложений) и другими элементами пользовательского интерфейса значка, такими как недавние события и уведомления. Если вы используете launcher3 в AOSP без модификаций, то, скорее всего, вы уже поддерживаете эту функцию значков.

Требования NFC

Устройства с NFC должны включать NFC во время готовой работы (т. е. с помощью мастера настройки) и быть настроены на принятие намерений управляемой подготовки:

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

Требования к установке

Устройства, которые включают готовые функции (например, мастер настройки), должны реализовывать подготовку владельца устройства. Когда откроется готовый интерфейс, он должен проверить, не завершил ли уже другой процесс (например, подготовка владельца устройства) настройку пользователя, и если это так, он должен активировать домашнее намерение и завершить настройку. Это намерение перехватывается приложением подготовки, которое затем передает управление новому владельцу устройства.

Чтобы выполнить требования к настройке, добавьте следующий код в основное действие настройки устройства:

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

       ...
   }