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

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

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

Основные требования

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

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

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

Для поддержки HardwarePropertiesManager API реализация 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

Android 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

Android 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 без изменений, то вы , вероятно , уже поддерживают эту функцию Badging.

Требования 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();
       }

       ...
   }