Menerapkan Manajemen Perangkat

Bagian ini menjelaskan cara mengaktifkan dan memvalidasi fitur pengelolaan perangkat yang diperlukan untuk menyiapkan perangkat untuk profil terkelola. Ini juga mencakup kasus pengguna pemilik perangkat yang penting dalam lingkungan perusahaan.

Selain kode AOSP, perangkat memerlukan komponen berikut untuk berfungsi dengan profil terkelola.

Persyaratan Umum

Perangkat yang dimaksudkan untuk mendukung manajemen perangkat harus memenuhi persyaratan umum berikut.

Nilai HAL termal

Android 7.0 dan yang lebih baru menyertakan dukungan untuk HardwarePropertiesManager API, sebuah API pemantauan dan pelaporan kesehatan perangkat yang memungkinkan aplikasi untuk menanyakan status perangkat keras perangkat. API ini diekspos melalui android.os.HardwarePropertiesManager dan melakukan panggilan melalui HardwarePropertiesManagerService ke HAL termal perangkat keras ( hardware/libhardware/include/hardware/thermal.h ). Ini adalah API yang dilindungi, artinya hanya aplikasi Device Policy Controller (DPC) pemilik perangkat/profil dan VrListenerService saat ini yang dapat memanggilnya.

Untuk mendukung HardwarePropertiesManager API, implementasi HAL termal perangkat harus dapat melaporkan nilai berikut:

Nilai Skala Pelaporan Mengaktifkan
Suhu [CPU|GPU|Baterai|Kulit Perangkat] Suhu komponen dalam derajat Celcius Aplikasi dapat memeriksa suhu perangkat dan suhu pelambatan/penonaktifan komponen
CPU aktif/total waktu diaktifkan Waktu dalam milidetik Aplikasi dapat memeriksa penggunaan CPU per inti
Kecepatan kipas RPM Aplikasi dapat memeriksa kecepatan kipas

Implementasi harus menangani situasi nilai pelaporan dengan benar saat inti (atau GPU, baterai, kipas) offline atau dicolokkan/dicabut.

Mengaktifkan pengelolaan perangkat

Untuk mengaktifkan pengelolaan perangkat, pastikan fitur uses-features berikut telah dideklarasikan:

  • android.software.device_admin
  • android.software.managed_users (fitur dideklarasikan jika dan hanya jika perangkat memiliki memori minimal 2 GB.)

Untuk mengonfirmasi nilai uses-feature ini telah dideklarasikan pada perangkat, jalankan: adb shell pm list features .

Hanya aplikasi penting

Secara default, hanya aplikasi yang penting untuk pengoperasian profil yang benar yang diaktifkan sebagai bagian dari penyediaan perangkat terkelola. Perlu diingat, semua contoh contoh file _managed_profile.xml di bawah ini hanya relevan jika android.software.managed_users dideklarasikan. OEM harus memastikan profil atau perangkat yang dikelola memiliki semua aplikasi yang diperlukan dengan memodifikasi:

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

Aplikasi yang diperlukan dan yang tidak diizinkan untuk pengguna terkelola diterapkan ke pengguna sekunder yang dibuat melalui DevicePolicyManager#createAndManageUser .

Contoh dari perangkat Nexus

Android 8.x dan sebelumnya

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

Android 9 dan lebih tinggi

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 dan sebelumnya

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

Android 9 dan lebih tinggi

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>

Persyaratan peluncur

Anda harus memperbarui Peluncur untuk mendukung aplikasi lencana dengan lencana ikon (disediakan di AOSP untuk mewakili aplikasi yang dikelola) dan elemen antarmuka pengguna lencana lainnya seperti terbaru dan pemberitahuan. Jika Anda menggunakan launcher3 di AOSP tanpa modifikasi, kemungkinan besar Anda sudah mendukung fitur badge ini.

Persyaratan NFC

Perangkat dengan NFC harus mengaktifkan NFC selama pengalaman siap pakai (yaitu, wizard penyiapan) dan dikonfigurasi untuk menerima maksud penyediaan terkelola:

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

Persyaratan penyiapan

Perangkat yang menyertakan pengalaman out-of-box (yaitu, wizard penyiapan) harus menerapkan penyediaan pemilik perangkat. Saat pengalaman out-of-box terbuka, itu harus memeriksa apakah proses lain (seperti penyediaan pemilik perangkat) telah menyelesaikan penyiapan pengguna dan, jika demikian, itu harus mengaktifkan maksud rumah dan menyelesaikan penyiapan. Intent ini ditangkap oleh aplikasi penyediaan, yang kemudian menyerahkan kontrol ke pemilik perangkat yang baru disetel.

Untuk memenuhi persyaratan penyiapan, tambahkan kode berikut ke aktivitas utama penyiapan perangkat:

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

       ...
   }