Penghentian admin perangkat. Mulai Android 9 (API level 28), beberapa kebijakan admin akan ditandai sebagai tidak digunakan lagi saat dipanggil oleh admin perangkat. Sebaiknya, Anda mulai bersiap-siap sekarang untuk perubahan ini. Untuk mempelajari lebih lanjut dan melihat opsi migrasi, baca Penghentian admin perangkat.
Android menyertakan dukungan untuk aplikasi perusahaan dengan menawarkan Android Device Administration API. Device Administration API menyediakan fitur administrasi perangkat pada tingkat sistem. API ini memungkinkan Anda membuat aplikasi peka keamanan yang berguna dalam lingkungan perusahaan, di mana profesional IT memerlukan kontrol yang kaya atas perangkat karyawan. Misalnya, aplikasi Email Android bawaan telah memanfaatkan API ini untuk meningkatkan dukungan Exchange. Melalui aplikasi Email, administrator Exchange dapat menerapkan kebijakan sandi — termasuk sandi alfanumerik atau PIN numerik — di seluruh perangkat. Administrator juga dapat menghapus total perangkat yang hilang atau dicuri dari jarak jauh. Pengguna Exchange dapat menyinkronkan data kalender dan email mereka.
Dokumen ini ditujukan bagi developer yang ingin mengembangkan solusi perusahaan untuk perangkat yang didukung Android. Bagian ini membahas berbagai fitur yang disediakan oleh Device Administration API untuk memberikan keamanan yang lebih kuat bagi perangkat karyawan yang didukung oleh Android.
Catatan Untuk informasi tentang cara membangun Pengontrol Kebijakan Kerja untuk deployment Android for Work, lihat Membuat Pengontrol Kebijakan Perangkat.
Mode Pemilik Perangkat Headless
Android 14 (level API 34) memperkenalkan mode Pengguna Sistem Headless (perangkat yang
UserManager.isHeadlessSystemUserMode
menampilkan true
). Dalam mode Pengguna Sistem Headless, pengguna sistem adalah
pengguna latar belakang dan mengandalkan pengguna latar depan tambahan untuk interaksi
pengguna akhir. Android 14 juga memperkenalkan
mode afiliasi pemilik perangkat headless,
yang menambahkan Pemilik Profil ke semua
pengguna terafiliasi
selain pengguna sistem yang menetapkan Pemilik Perangkat.
Di perangkat yang dikonfigurasi dengan pengguna sistem headless (dengan pengguna sistem berjalan di latar belakang), hanya kebijakan perangkat dengan cakupan global (kebijakan yang berlaku untuk semua pengguna) yang diterapkan ke pengguna latar depan atau pengguna. Lihat
addUserRestriction
untuk mengetahui detailnya.
Produsen perangkat Android dapat melihat panduan yang dipublikasikan di source.android.com.
Ringkasan Device Administration API
Berikut beberapa contoh jenis aplikasi yang mungkin menggunakan Device Administration API:
- Program email.
- Aplikasi keamanan yang melakukan penghapusan total dari jarak jauh.
- Layanan dan aplikasi pengelolaan perangkat.
Bagaimana caranya?
Anda dapat menggunakan Device Administration API untuk menulis aplikasi admin perangkat yang diinstal pengguna di perangkat mereka. Aplikasi admin perangkat ini akan menerapkan kebijakan yang diinginkan. Begini caranya:
- Administrator sistem menulis aplikasi admin perangkat yang menerapkan kebijakan keamanan perangkat jarak jauh/lokal. Kebijakan ini dapat di-hard code ke dalam aplikasi, atau aplikasi dapat mengambil kebijakan secara dinamis dari server pihak ketiga.
- Aplikasi tersebut diinstal di perangkat pengguna. Saat ini, Android tidak memiliki solusi penyediaan otomatis. Beberapa cara sysadmin mendistribusikan aplikasi
ke pengguna adalah sebagai berikut:
- Google Play.
- Mengaktifkan penginstalan dari toko lain.
- Mendistribusikan aplikasi melalui tempat lain, seperti email atau situs.
- Sistem akan meminta pengguna untuk mengaktifkan aplikasi admin perangkat. Bagaimana dan kapan hal ini terjadi bergantung pada cara aplikasi diimplementasikan.
- Setelah pengguna mengaktifkan aplikasi admin perangkat, mereka harus mematuhi kebijakannya. Dengan mematuhi kebijakan tersebut, biasanya akan memberikan manfaat, seperti akses ke sistem dan data sensitif.
Jika pengguna tidak mengaktifkannya, aplikasi admin perangkat akan tetap berada di perangkat, tetapi dalam keadaan tidak aktif. Pengguna tidak lagi harus tunduk pada kebijakannya, dan juga tidak akan mendapatkan manfaat aplikasi — misalnya, tidak dapat lagi menyinkronkan data.
Jika pengguna gagal mematuhi kebijakan (misalnya, jika pengguna menetapkan sandi yang melanggar pedoman), aplikasi dapat menentukan cara menangani hal ini. Namun, biasanya hal ini akan mengakibatkan pengguna tidak dapat menyinkronkan data.
Jika perangkat mencoba terhubung ke server yang memerlukan kebijakan yang tidak didukung di Device Administration API, koneksi tersebut tidak akan diizinkan. Device Administration API saat ini tidak mengizinkan penyediaan sebagian. Dengan kata lain, jika perangkat (misalnya, perangkat lama) tidak mendukung semua kebijakan yang disebutkan, tidak ada cara untuk mengizinkan perangkat tersebut terhubung.
Jika perangkat berisi beberapa aplikasi admin yang diaktifkan, kebijakan yang paling ketat akan diterapkan. Tidak ada cara untuk menargetkan aplikasi admin tertentu.
Untuk meng-uninstal aplikasi admin perangkat yang ada, pengguna harus membatalkan pendaftaran aplikasi sebagai administrator terlebih dahulu.
Kebijakan
Dalam lingkungan perusahaan, perangkat karyawan sering kali harus mematuhi rangkaian kebijakan ketat yang mengatur penggunaan perangkat. Device Administration API mendukung kebijakan yang tercantum dalam Tabel 1. Perhatikan bahwa Device Administration API saat ini hanya mendukung sandi untuk kunci layar:
Tabel 1. Kebijakan yang didukung oleh Device Administration API.
Kebijakan | Deskripsi |
---|---|
Sandi diaktifkan | Mengharuskan perangkat memiliki PIN atau sandi. |
Panjang sandi minimal | Menetapkan jumlah karakter yang diperlukan untuk sandi. Misalnya, Anda dapat mewajibkan PIN atau sandi untuk memiliki setidaknya enam karakter. |
Sandi alfanumerik diperlukan | Mengharuskan sandi memiliki kombinasi huruf dan angka. Kombinasi tersebut dapat menyertakan karakter simbol. |
Sandi kompleks diperlukan | Mengharuskan sandi berisi setidaknya huruf, digit numerik, dan simbol khusus. Diperkenalkan di Android 3.0. |
Jumlah huruf minimal yang diperlukan dalam sandi | Jumlah minimum huruf yang diperlukan dalam sandi untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0. |
Jumlah huruf kecil minimal yang diperlukan dalam sandi | Jumlah minimum huruf kecil yang diperlukan dalam sandi untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0. |
Jumlah karakter non-huruf minimal yang diperlukan dalam sandi | Jumlah minimum karakter non-huruf yang diperlukan dalam sandi untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0. |
Jumlah digit numerik minimal yang diperlukan dalam sandi | Jumlah minimal digit numerik yang diperlukan dalam sandi untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0. |
Jumlah simbol minimal yang diperlukan dalam sandi | Jumlah minimal simbol yang diperlukan dalam sandi untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0. |
Jumlah huruf besar minimal yang diperlukan dalam sandi | Jumlah minimal huruf besar yang diperlukan dalam sandi untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0. |
Batas waktu masa berlaku sandi | Saat sandi akan habis masa berlakunya, yakni dinyatakan dengan delta dalam milidetik dari saat admin perangkat menetapkan batas waktu masa berlaku. Diperkenalkan di Android 3.0. |
Pembatasan histori sandi | Kebijakan ini mencegah pengguna menggunakan ulang n sandi unik terakhir.
Kebijakan ini biasanya digunakan bersama dengan
setPasswordExpirationTimeout() , yang memaksa
pengguna memperbarui sandi mereka setelah jangka waktu tertentu telah berlalu.
Diperkenalkan di Android 3.0. |
Jumlah upaya memasukkan sandi gagal maksimum | Menentukan berapa kali pengguna dapat memasukkan sandi yang salah sebelum perangkat menghapus total datanya. Device Administration API juga memungkinkan administrator untuk mereset perangkat dari jarak jauh ke setelan default pabrik. Tindakan ini mengamankan data jika perangkat hilang atau dicuri. |
Kunci waktu tidak aktif maksimal | Menetapkan durasi waktu sejak pengguna terakhir kali menyentuh layar atau menekan tombol sebelum perangkat mengunci layar. Jika hal ini terjadi, pengguna harus memasukkan PIN atau sandi lagi sebelum dapat menggunakan perangkat dan mengakses data. Nilainya bisa antara 1 dan 60 menit. |
Enkripsi penyimpanan diperlukan | Menentukan bahwa area penyimpanan harus dienkripsi, jika perangkat mendukungnya. Diperkenalkan di Android 3.0. |
Nonaktifkan kamera | Menentukan bahwa kamera harus dinonaktifkan. Perhatikan bahwa hal ini tidak harus menjadi penonaktifan permanen. Kamera dapat diaktifkan/dinonaktifkan secara dinamis berdasarkan konteks, waktu, dan sebagainya. Diperkenalkan di Android 4.0. |
Fitur lainnya
Selain mendukung kebijakan yang tercantum dalam tabel di atas, Device Administration API memungkinkan Anda melakukan hal berikut:
- Meminta pengguna untuk menetapkan sandi baru.
- Mengunci perangkat dengan segera.
- Menghapus total data perangkat (yaitu, memulihkan perangkat ke setelan default pabrik).
Aplikasi contoh
Contoh yang digunakan di halaman ini didasarkan pada contoh Device Administration API, yang disertakan dalam contoh SDK (tersedia melalui
Android SDK Manager) dan berada di sistem Anda sebagai
<sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
.
Aplikasi contoh tersebut menawarkan demo fitur admin perangkat. Tindakan ini memberi pengguna antarmuka pengguna yang memungkinkan mereka mengaktifkan aplikasi admin perangkat. Setelah mengaktifkan aplikasi, mereka dapat menggunakan tombol di antarmuka pengguna untuk melakukan hal berikut:
- Menetapkan kualitas sandi.
- Menentukan persyaratan sandi pengguna, seperti panjang minimum, jumlah minimum karakter numerik yang harus dimilikinya, dan sebagainya.
- Menetapkan sandi. Jika sandi tidak sesuai dengan kebijakan yang ditentukan, sistem akan menampilkan error.
- Menyetel berapa banyak upaya sandi gagal yang dapat terjadi sebelum perangkat dihapus total (yaitu, dipulihkan ke setelan pabrik).
- Menetapkan berapa lama sandi akan tidak berlaku.
- Menetapkan panjang histori sandi (panjang yang dimaksud adalah jumlah sandi lama yang disimpan dalam histori). Tindakan ini mencegah pengguna menggunakan kembali salah satu n sandi terakhir yang sebelumnya mereka gunakan.
- Menentukan bahwa area penyimpanan harus dienkripsi, jika perangkat mendukungnya.
- Menetapkan jumlah maksimum waktu tidak aktif yang dapat berlalu sebelum perangkat dikunci.
- Membuat perangkat terkunci dengan segera.
- Menghapus total data perangkat (yaitu, memulihkan setelan pabrik).
- Menonaktifkan kamera.
![](https://developer.android.google.cn/static/images/admin/device-admin-app.png?authuser=3&hl=id)
Gambar 1. Screenshot contoh aplikasi
Mengembangkan aplikasi administrasi perangkat
Administrator sistem dapat menggunakan Device Administration API untuk menulis aplikasi yang memberlakukan penerapan kebijakan keamanan perangkat jarak jauh/lokal. Bagian ini meringkas langkah-langkah yang terlibat dalam pembuatan aplikasi administrasi perangkat.
Membuat manifes
Untuk menggunakan Device Administration API, manifes aplikasi harus menyertakan hal berikut:
- Subclass
DeviceAdminReceiver
yang menyertakan hal-hal berikut:- Izin
BIND_DEVICE_ADMIN
. - Kemampuan untuk merespons intent
ACTION_DEVICE_ADMIN_ENABLED
, yang dinyatakan dalam manifes sebagai filter intent.
- Izin
- Deklarasi kebijakan keamanan yang digunakan dalam metadata.
Berikut adalah kutipan dari manifes contoh Administrasi Perangkat:
<activity android:name=".app.DeviceAdminSample" android:label="@string/activity_sample_device_admin"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.SAMPLE_CODE" /> </intent-filter> </activity> <receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver" android:label="@string/sample_device_admin" android:description="@string/sample_device_admin_description" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
Perhatikan bahwa:
- Atribut berikut merujuk ke resource string yang bagi aplikasi contoh berada di
ApiDemos/res/values/strings.xml
. Untuk informasi selengkapnya tentang resource, lihat Resource Aplikasi.android:label="@string/activity_sample_device_admin"
merujuk pada label yang dapat dibaca pengguna untuk aktivitas.android:label="@string/sample_device_admin"
merujuk pada label yang dapat dibaca pengguna untuk izin.android:description="@string/sample_device_admin_description"
merujuk pada deskripsi izin yang dapat dibaca pengguna. Deskripsi biasanya lebih panjang dan lebih informatif daripada label.
android:permission="android.permission.BIND_DEVICE_ADMIN"
adalah izin yang harus dimiliki subclassDeviceAdminReceiver
, untuk memastikan bahwa hanya sistem yang dapat berinteraksi dengan penerima (tidak ada aplikasi yang dapat diberi izin ini). Tindakan ini akan mencegah aplikasi lain menyalahgunakan aplikasi admin perangkat Anda.android.app.action.DEVICE_ADMIN_ENABLED
adalah tindakan utama yang harus ditangani subclassDeviceAdminReceiver
agar diizinkan untuk mengelola perangkat. Atribut ini disetel ke penerima saat pengguna mengaktifkan aplikasi admin perangkat. Kode Anda biasanya menangani hal ini dalamonEnabled()
. Agar didukung, penerima juga harus memerlukan izinBIND_DEVICE_ADMIN
sehingga aplikasi lain tidak dapat menyalahgunakannya.- Saat pengguna mengaktifkan aplikasi admin perangkat, hal tersebut akan memberikan izin kepada penerima untuk melakukan tindakan sebagai respons terhadap siaran peristiwa sistem tertentu. Saat peristiwa yang sesuai muncul, aplikasi dapat memberlakukan kebijakan. Misalnya, jika pengguna mencoba menetapkan sandi baru yang tidak memenuhi persyaratan kebijakan, aplikasi dapat meminta pengguna untuk memilih sandi lain yang memenuhi persyaratan.
- Jangan mengubah nama penerima setelah memublikasikan aplikasi. Jika nama dalam
manifes berubah, admin perangkat akan dinonaktifkan saat pengguna mengupdate aplikasi. Untuk mempelajari lebih lanjut, lihat
<receiver>
. android:resource="@xml/device_admin_sample"
mendeklarasikan kebijakan keamanan yang digunakan dalam metadata. Metadata tersebut memberikan informasi tambahan khusus untuk administrator perangkat, seperti yang diurai oleh classDeviceAdminInfo
. Berikut ini isi daridevice_admin_sample.xml
:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies> </device-admin>
Saat mendesain aplikasi administrasi perangkat, Anda tidak perlu menyertakan semua kebijakan, hanya kebijakan yang relevan untuk aplikasi Anda.
Untuk diskusi selengkapnya tentang file manifes, lihat Panduan Developer Android.Mengimplementasikan kode
Device Administration API menyertakan class berikut:
DeviceAdminReceiver
- Class dasar untuk mengimplementasikan komponen administrasi perangkat. Class ini memberikan
kemudahan untuk menafsirkan tindakan intent mentah yang dikirim oleh
sistem. Aplikasi Administrasi Perangkat Anda harus menyertakan
subclass
DeviceAdminReceiver
. DevicePolicyManager
- Class untuk mengelola kebijakan yang diterapkan di perangkat. Sebagian besar klien
class ini harus sudah memublikasikan
DeviceAdminReceiver
yang saat ini diaktifkan pengguna.DevicePolicyManager
mengelola kebijakan untuk satu atau beberapa instanceDeviceAdminReceiver
DeviceAdminInfo
- Class ini digunakan untuk menentukan metadata bagi komponen administrator perangkat.
Class ini memberikan dasar untuk aplikasi administrasi perangkat yang berfungsi penuh.
Bagian selanjutnya dari bagian ini menjelaskan cara menggunakan API DeviceAdminReceiver
dan
DevicePolicyManager
untuk menulis aplikasi admin perangkat.
Melakukan Subclassing DeviceAdminReceiver
Untuk membuat aplikasi admin perangkat, Anda harus membuat subclass
DeviceAdminReceiver
. Class DeviceAdminReceiver
terdiri dari serangkaian callback yang dipicu saat peristiwa tertentu terjadi.
Dalam subclass DeviceAdminReceiver
-nya, aplikasi contoh hanya menampilkan notifikasi Toast
sebagai respons terhadap peristiwa tertentu. Contoh:
Kotlin
class DeviceAdminSample : DeviceAdminReceiver() { private fun showToast(context: Context, msg: String) { context.getString(R.string.admin_receiver_status, msg).let { status -> Toast.makeText(context, status, Toast.LENGTH_SHORT).show() } } override fun onEnabled(context: Context, intent: Intent) = showToast(context, context.getString(R.string.admin_receiver_status_enabled)) override fun onDisableRequested(context: Context, intent: Intent): CharSequence = context.getString(R.string.admin_receiver_status_disable_warning) override fun onDisabled(context: Context, intent: Intent) = showToast(context, context.getString(R.string.admin_receiver_status_disabled)) override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) = showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)) ... }
Java
public class DeviceAdminSample extends DeviceAdminReceiver { void showToast(Context context, String msg) { String status = context.getString(R.string.admin_receiver_status, msg); Toast.makeText(context, status, Toast.LENGTH_SHORT).show(); } @Override public void onEnabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_enabled)); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return context.getString(R.string.admin_receiver_status_disable_warning); } @Override public void onDisabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_disabled)); } @Override public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) { showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)); } ... }
Mengaktifkan aplikasi
Salah satu peristiwa utama yang harus ditangani oleh aplikasi admin perangkat adalah pengguna yang mengaktifkan aplikasi. Pengguna harus secara eksplisit mengaktifkan aplikasi agar kebijakan diterapkan. Jika pengguna memilih untuk tidak mengaktifkan aplikasi, aplikasi akan tetap ada di perangkat, tetapi kebijakannya tidak akan diterapkan, dan pengguna tidak akan mendapatkan manfaat aplikasi apa pun.
Proses pengaktifan aplikasi dimulai saat pengguna melakukan
tindakan yang memicu intent
ACTION_ADD_DEVICE_ADMIN
. Pada aplikasi contoh, hal ini terjadi saat pengguna mengklik kotak centang Aktifkan Admin.
Saat pengguna mengklik kotak centang Enable Admin, tampilan akan berubah untuk meminta pengguna mengaktifkan aplikasi admin perangkat, seperti ditunjukkan pada gambar 2.
![](https://developer.android.google.cn/static/images/admin/device-admin-activate-prompt.png?authuser=3&hl=id)
Gambar 2. Aplikasi contoh: mengaktifkan aplikasi
Di bawah ini adalah kode yang dijalankan saat pengguna mengklik kotak centang Aktifkan Admin. Hal ini memiliki efek yang memicu callback onPreferenceChange()
. Callback ini dipanggil saat nilai Preference
ini telah diubah oleh pengguna dan akan ditetapkan dan/atau dipertahankan. Jika pengguna mengaktifkan aplikasi, tampilan
akan berubah untuk meminta pengguna mengaktifkan aplikasi admin perangkat, seperti yang ditunjukkan pada gambar
2. Jika tidak, aplikasi admin perangkat akan dinonaktifkan.
Kotlin
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { if (super.onPreferenceChange(preference, newValue)) return true val value = newValue as Boolean if (preference == enableCheckbox) { if (value != adminActive) { if (value) { // Launch the activity to have the user enable our admin. val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply { putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample) putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, activity.getString(R.string.add_admin_extra_app_text)) } startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN) // return false - don't update checkbox until we're really active return false } else { dpm.removeActiveAdmin(deviceAdminSample) enableDeviceCapabilitiesArea(false) adminActive = false } } } else if (preference == disableCameraCheckbox) { dpm.setCameraDisabled(deviceAdminSample, value) } return true }
Java
@Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (super.onPreferenceChange(preference, newValue)) { return true; } boolean value = (Boolean) newValue; if (preference == enableCheckbox) { if (value != adminActive) { if (value) { // Launch the activity to have the user enable our admin. Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, activity.getString(R.string.add_admin_extra_app_text)); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); // return false - don't update checkbox until we're really active return false; } else { dpm.removeActiveAdmin(deviceAdminSample); enableDeviceCapabilitiesArea(false); adminActive = false; } } } else if (preference == disableCameraCheckbox) { dpm.setCameraDisabled(deviceAdminSample, value); } return true; }
Baris
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mDeviceAdminSample)
menyatakan bahwa mDeviceAdminSample
(yang merupakan
komponen DeviceAdminReceiver
) adalah kebijakan target.
Baris ini memanggil antarmuka pengguna yang ditunjukkan pada gambar 2, yang memandu pengguna dalam
menambahkan administrator perangkat ke sistem (atau memungkinkan mereka untuk menolaknya).
Saat aplikasi perlu melakukan operasi yang bergantung pada
aplikasi admin perangkat yang diaktifkan, aplikasi akan mengonfirmasi bahwa aplikasi tersebut
aktif. Untuk melakukannya, ini menggunakan metode DevicePolicyManager
isAdminActive()
. Perhatikan bahwa metode DevicePolicyManager
isAdminActive()
menggunakan komponen DeviceAdminReceiver
sebagai argumennya:
Kotlin
private lateinit var dpm: DevicePolicyManager ... private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
Java
DevicePolicyManager dpm; ... private boolean isActiveAdmin() { return dpm.isAdminActive(deviceAdminSample); }
Mengelola kebijakan
DevicePolicyManager
adalah class publik untuk mengelola kebijakan
yang diterapkan di perangkat. DevicePolicyManager
mengelola kebijakan untuk satu atau beberapa instance DeviceAdminReceiver
.
Anda mendapatkan handle untuk DevicePolicyManager
sebagai berikut:
Kotlin
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
Java
DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
Bagian ini menjelaskan cara menggunakan DevicePolicyManager
untuk melakukan tugas administratif:
Menetapkan kebijakan sandi
DevicePolicyManager
menyertakan API untuk menetapkan dan menerapkan kebijakan sandi perangkat. Di Device Administration API, sandi hanya berlaku untuk
kunci layar. Bagian ini menjelaskan tugas umum terkait sandi.
Menetapkan sandi untuk perangkat
Kode ini menampilkan antarmuka pengguna yang meminta pengguna untuk menetapkan sandi:
Kotlin
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) }
Java
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent);
Menetapkan kualitas sandi
Kualitas sandi dapat berupa salah satu konstanta DevicePolicyManager
berikut:
PASSWORD_QUALITY_ALPHABETIC
- Pengguna harus memasukkan sandi yang berisi setidaknya karakter alfabet (atau simbol lainnya).
PASSWORD_QUALITY_ALPHANUMERIC
- Pengguna harus memasukkan sandi yang berisi setidaknya numerik dan karakter alfabet (atau simbol lainnya).
PASSWORD_QUALITY_NUMERIC
- Pengguna harus memasukkan sandi yang berisi setidaknya karakter numerik.
PASSWORD_QUALITY_COMPLEX
- Pengguna harus memasukkan sandi yang berisi setidaknya huruf, digit numerik, dan simbol khusus.
PASSWORD_QUALITY_SOMETHING
- Kebijakan ini memerlukan semacam sandi, tetapi tidak memedulikan maksudnya.
PASSWORD_QUALITY_UNSPECIFIED
- Kebijakan ini tidak memiliki persyaratan untuk sandi.
Misalnya, ini adalah cara menetapkan kebijakan sandi untuk mengharuskan sandi alfanumerik:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
Menetapkan persyaratan konten sandi
Mulai Android 3.0, class DevicePolicyManager
menyertakan metode yang memungkinkan Anda menyesuaikan konten sandi. Misalnya, Anda dapat menetapkan kebijakan yang menyatakan bahwa sandi harus berisi minimal n huruf besar. Berikut adalah metode untuk menyesuaikan konten sandi:
setPasswordMinimumLetters()
setPasswordMinimumLowerCase()
setPasswordMinimumUpperCase()
setPasswordMinimumNonLetter()
setPasswordMinimumNumeric()
setPasswordMinimumSymbols()
Misalnya, cuplikan ini menyatakan bahwa sandi harus memiliki setidaknya 2 huruf besar:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwMinUppercase = 2 ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwMinUppercase = 2; ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
Menetapkan panjang sandi minimal
Anda dapat menentukan bahwa sandi setidaknya harus memiliki panjang minimum yang ditentukan. Contoh:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwLength: Int = ... ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwLength; ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
Menetapkan jumlah maksimal upaya memasukkan sandi gagal
Anda dapat menetapkan jumlah maksimum upaya sandi gagal yang diizinkan sebelum perangkat dihapus total (yaitu, direset ke setelan pabrik). Contoh:
Kotlin
val dPM:DevicePolicyManager private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val maxFailedPw: Int = ... ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int maxFailedPw; ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
Menetapkan batas waktu masa berlaku sandi
Mulai Android 3.0, Anda dapat menggunakan metode
setPasswordExpirationTimeout()
untuk menetapkan kapan masa berlaku sandi akan berakhir, yang dinyatakan sebagai delta dalam milidetik sejak admin perangkat menetapkan waktu habis masa berlaku. Contoh:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwExpiration: Long = ... ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; long pwExpiration; ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
Membatasi sandi yang didasarkan pada histori
Mulai Android 3.0, Anda dapat menggunakan metode
setPasswordHistoryLength()
untuk membatasi kemampuan
pengguna dalam menggunakan kembali sandi lama. Metode ini memerlukan parameter length, yang menentukan jumlah sandi lama
yang disimpan. Saat kebijakan ini aktif, pengguna tidak dapat memasukkan sandi baru yang cocok dengan n sandi terakhir. Dengan begitu,
pengguna tidak akan menggunakan sandi yang sama berulang-ulang. Kebijakan ini biasanya digunakan
bersama dengan
setPasswordExpirationTimeout()
,
yang memaksa pengguna
memperbarui sandi mereka setelah jangka waktu tertentu telah berlalu.
Misalnya, cuplikan ini melarang pengguna menggunakan kembali 5 sandi terakhirnya:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwHistoryLength = 5 ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwHistoryLength = 5; ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);
Menetapkan kunci perangkat
Anda dapat menetapkan periode maksimum ketidakaktifan pengguna yang dapat terjadi sebelum perangkat terkunci. Contoh:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val timeMs: Long = 1000L * timeout.text.toString().toLong() ... dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... long timeMs = 1000L*Long.parseLong(timeout.getText().toString()); dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);
Anda juga dapat secara terprogram memberi tahu perangkat untuk mengunci dengan segera:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.lockNow()
Java
DevicePolicyManager dpm; dpm.lockNow();
Menjalankan penghapusan total data
Anda dapat menggunakan metode DevicePolicyManager
wipeData()
untuk mereset perangkat ke setelan pabrik. Hal ini berguna
jika perangkat hilang atau dicuri. Sering kali keputusan untuk menghapus total perangkat
adalah hasil dari kondisi tertentu yang terpenuhi. Misalnya, Anda dapat menggunakan setMaximumFailedPasswordsForWipe()
untuk menyatakan bahwa perangkat harus dihapus total setelah sejumlah upaya sandi gagal tertentu terjadi.
Hapus total data seperti berikut:
Kotlin
private lateinit var dpm: DevicePolicyManager dpm.wipeData(0)
Java
DevicePolicyManager dpm; dpm.wipeData(0);
Metode wipeData()
menggunakan bit mask opsi tambahan
sebagai parameternya. Saat ini, nilainya harus 0.
Menonaktifkan kamera
Mulai Android 4.0, Anda dapat menonaktifkan kamera. Perhatikan bahwa hal ini tidak harus berupa penonaktifan permanen. Kamera dapat diaktifkan/dinonaktifkan secara dinamis berdasarkan konteks, waktu, dan sebagainya.
Anda mengontrol apakah kamera dinonaktifkan menggunakan
metode setCameraDisabled()
. Misalnya, cuplikan ini akan menetapkan kamera untuk diaktifkan atau dinonaktifkan berdasarkan setelan kotak centang:
Kotlin
private lateinit var disableCameraCheckbox: CheckBoxPreference private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
Java
private CheckBoxPreference disableCameraCheckbox; DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());
Enkripsi penyimpanan
Mulai Android 3.0, Anda dapat menggunakan
metode setStorageEncryption()
untuk menetapkan kebijakan yang memerlukan enkripsi area penyimpanan, jika didukung.
Contoh:
Kotlin
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setStorageEncryption(deviceAdminSample, true)
Java
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setStorageEncryption(deviceAdminSample, true);
Lihat contoh Device Administration API untuk contoh lengkap tentang cara mengaktifkan enkripsi penyimpanan.
Contoh kode lainnya
Contoh Android AppRestrictionEnforcer dan DeviceOwner menunjukkan lebih lanjut penggunaan API yang dibahas di halaman ini.