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