Google berkomitmen untuk mendorong terwujudnya keadilan rasial bagi komunitas Kulit Hitam. Lihat caranya.

Ringkasan administrasi perangkat

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 memberikan fitur administrasi perangkat pada tingkat sistem. API tersebut memungkinkan Anda membuat aplikasi peka keamanan yang berguna dalam lingkungan perusahaan, di mana profesional TI mengharuskan kontrol yang ketat atas perangkat karyawan. Misalnya, aplikasi Email Android bawaan telah memanfaatkan API tersebut 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 dari jarak jauh (yaitu, memulihkan setelan default pabrik pada) handset yang hilang atau dicuri. Pengguna Exchange dapat menyinkronkan data kalender dan email mereka.

Dokumen ini ditujukan bagi developer yang ingin mengembangkan solusi perusahaan untuk perangkat yang didukung Android. Dokumen ini membahas berbagai fitur yang disediakan oleh Device Administration API untuk memberikan keamanan yang lebih kuat bagi perangkat karyawan yang didukung Android.

Catatan: Untuk informasi tentang cara membuat Pengontrol Kebijakan Kerja untuk penerapan Android for Work, lihat Membuat Pengontrol Kebijakan Perangkat.

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 cara kerjanya?

Gunakan Device Administration API untuk menulis aplikasi admin perangkat yang diinstal pengguna di perangkat mereka. Aplikasi admin perangkat tersebut akan memberlakukan kebijakan yang diinginkan. Berikut ini caranya:

  • Administrator sistem menulis aplikasi admin perangkat yang memberlakukan kebijakan keamanan perangkat jarak jauh/lokal. Kebijakan ini dapat di-hard-coded ke dalam aplikasi, atau aplikasi tersebut dapat mengambil secara dinamis kebijakan dari server pihak ketiga.
  • Aplikasi tersebut diinstal di perangkat pengguna. Saat ini, Android tidak memiliki solusi penyediaan otomatis. Beberapa cara sysadmin mendistribusikan aplikasi kepada 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 bagaimana aplikasi tersebut diimplementasikan.
  • Setelah pengguna mengaktifkan aplikasi admin perangkat, mereka harus mematuhi kebijakannya. Dengan mematuhi kebijakan tersebut pengguna akan mendapatkan 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 tersebut (misalnya, jika pengguna menetapkan sandi yang melanggar pedoman), maka keputusan untuk menangani hal ini akan ditentukan oleh aplikasi tersebut. Namun, biasanya hal ini akan mengakibatkan pengguna tidak dapat lagi menyinkronkan data.

Jika perangkat mencoba terhubung ke server yang memerlukan kebijakan yang tidak didukung di Device Administration API, sambungan 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, maka tidak ada cara untuk mengizinkan perangkat tersebut tersambung.

Jika perangkat memiliki beberapa aplikasi admin yang diaktifkan, kebijakan yang paling ketat akan diberlakukan. Tidak ada cara untuk menargetkan aplikasi admin tertentu.

Untuk meng-uninstall aplikasi admin perangkat yang ada, pengguna harus terlebih dahulu membatalkan pendaftaran aplikasi sebagai administrator.

Kebijakan

Dalam lingkungan perusahaan, sering kali perangkat karyawan harus mematuhi sekumpulan kebijakan ketat yang mengatur penggunaan perangkat. Device Administration API mendukung kebijakan yang tercantum pada 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 mengharuskan PIN atau sandi untuk memiliki setidaknya enam karakter.
Sandi alfanumerik diperlukan Mengharuskan sandi untuk 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 minimal 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 minimal 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 minimal 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 untuk memperbarui sandinya setelah periode waktu yang ditentukan telah berlalu. Diperkenalkan di Android 3.0.
Jumlah maksimal upaya memasukkan sandi gagal 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 lama waktu pengguna terakhir menyentuh layar atau menekan tombol sebelum perangkat mengunci layar. Jika ini terjadi, pengguna harus memasukkan PIN atau sandinya 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.
Menonaktifkan kamera Menentukan bahwa kamera harus dinonaktifkan. Perhatikan bahwa hal ini tidak harus berupa 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).

Contoh aplikasi

Contoh yang digunakan dalam dokumen 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. Demo tersebut menyajikan kepada pengguna antarmuka pengguna yang memungkinkan mereka mengaktifkan aplikasi admin perangkat. Setelah mengaktifkan aplikasi tersebut, mereka dapat menggunakan tombol di antarmuka pengguna untuk melakukan hal berikut:

  • Menetapkan kualitas sandi.
  • Menentukan persyaratan sandi pengguna, seperti panjang minimal, jumlah minimal karakter numerik yang harus ada, dan sebagainya.
  • Menetapkan sandi. Jika sandi tidak sesuai dengan kebijakan yang ditentukan, sistem akan menampilkan error.
  • Menetapkan berapa kali upaya memasukkan sandi gagal dapat terjadi sebelum perangkat dihapus total (yaitu, dikembalikan 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). Hal ini mencegah pengguna menggunakan kembali salah satu dari n sandi terakhir yang sudah digunakan sebelumnya.
  • Menentukan bahwa area penyimpanan harus dienkripsi, jika perangkat mendukungnya.
  • Menetapkan lama maksimal waktu tidak aktif yang dapat berlalu sebelum perangkat terkunci.
  • Membuat perangkat terkunci dengan segera.
  • Menghapus total data perangkat (yaitu, memulihkan setelan pabrik).
  • Menonaktifkan kamera.

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 merangkum langkah-langkah yang diperlukan dalam pembuatan aplikasi administrasi perangkat.

Membuat manifes

Untuk menggunakan Device Administration API, manifes aplikasi harus menyertakan hal-hal berikut:

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, buka 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. Suatu deskripsi biasanya lebih panjang dan lebih informatif daripada label.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" adalah izin yang harus dimiliki subclass DeviceAdminReceiver, untuk memastikan bahwa hanya sistem yang dapat berinteraksi dengan penerima (tidak ada aplikasi yang dapat diberikan izin ini). Hal ini mencegah aplikasi lain menyalahgunakan aplikasi admin perangkat Anda.
  • android.app.action.DEVICE_ADMIN_ENABLED adalah tindakan utama yang harus ditangani subclass DeviceAdminReceiver agar diizinkan untuk mengelola perangkat. Atribut ini ditetapkan ke penerima saat pengguna mengaktifkan aplikasi admin perangkat. Kode Anda biasanya akan menangani ini dalam onEnabled(). Agar didukung, penerima juga harus meminta BIND_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 tersebut dapat meminta pengguna memilih sandi lain yang memenuhi persyaratan.
  • Hindari mengganti nama penerima setelah memublikasikan aplikasi Anda. 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 diuraikan oleh class DeviceAdminInfo. Berikut adalah isi dari device_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 merancang aplikasi administrasi perangkat, Anda tidak perlu menyertakan semua kebijakan, cukup sertakan kebijakan yang relevan untuk aplikasi Anda.

Untuk pembahasan 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 raw 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 sudah diaktifkan pengguna. DevicePolicyManager mengelola kebijakan untuk satu atau beberapa instance DeviceAdminReceiver
DeviceAdminInfo
Class ini digunakan untuk menentukan metadata untuk komponen administrator perangkat.

Class tersebut memberikan dasar untuk aplikasi administrasi perangkat yang berfungsi penuh. Sisa dari bagian ini akan menjelaskan kepada Anda cara menggunakan API DeviceAdminReceiver dan DevicePolicyManager untuk menulis aplikasi admin perangkat.

Melakukan Subclassing DeviceAdminReceiver

Untuk membuat aplikasi admin perangkat, Anda harus melakukan subclass pada DeviceAdminReceiver. Class DeviceAdminReceiver terdiri dari serangkaian callback yang dipicu saat peristiwa tertentu terjadi.

Pada subclass DeviceAdminReceiver-nya, aplikasi contoh hanya menampilkan notifikasi Toast sebagai respons terhadap peristiwa tertentu. Misalnya:

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 sedang mengaktifkan aplikasi. Pengguna tersebut harus secara eksplisit mengaktifkan aplikasi agar kebijakan diberlakukan. Jika pengguna memilih untuk tidak mengaktifkan aplikasi, aplikasi tersebut akan tetap ada di perangkat, tetapi kebijakannya tidak akan diberlakukan, dan pengguna tidak akan mendapatkan manfaat apa pun dari aplikasi.

Proses pengaktifan aplikasi dimulai saat pengguna melakukan tindakan yang memicu intent ACTION_ADD_DEVICE_ADMIN. Di aplikasi contoh, hal ini terjadi saat pengguna mengklik kotak centang Aktifkan Admin.

Saat pengguna mengklik kotak centang Aktifkan Admin, tampilan akan berubah untuk meminta pengguna mengaktifkan aplikasi admin perangkat, seperti yang ditunjukkan pada gambar 2.

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 ditampilkan di gambar 2, yang memandu pengguna selama penambahan administrator perangkat ke sistem (atau memungkinkan mereka untuk menolaknya).

Saat aplikasi perlu menjalankan operasi yang bergantung pada aplikasi admin perangkat yang diaktifkan, baris ini akan mengonfirmasi bahwa aplikasi tersebut aktif. Untuk melakukannya, baris ini menggunakan metode DevicePolicyManager isAdminActive(). Perhatikan bahwa metode DevicePolicyManager isAdminActive() mengambil 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 pengelolaan kebijakan yang diterapkan di perangkat. DevicePolicyManager mengelola kebijakan untuk satu atau beberapa instance DeviceAdminReceiver.

Anda mengelola DevicePolicyManager seperti 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 menjalankan tugas administratif:

Menetapkan kebijakan sandi

DevicePolicyManager menyertakan API untuk menetapkan dan memberlakukan kebijakan sandi perangkat. Dalam 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 dari konstanta DevicePolicyManager berikut:

PASSWORD_QUALITY_ALPHABETIC
Pengguna harus memasukkan sandi yang berisi setidaknya karakter alfabetis (atau simbol lainnya).
PASSWORD_QUALITY_ALPHANUMERIC
Pengguna harus memasukkan sandi yang berisi setidaknya karakter numerik dan karakter alfabetis (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 beberapa jenis sandi, tetapi tidak menentukan apa saja jenisnya.
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 akan menyertakan metode yang memungkinkan Anda untuk menyempurnakan konten sandi. Misalnya, Anda dapat menetapkan kebijakan yang menyatakan bahwa sandi harus berisi setidaknya n huruf besar. Berikut adalah beberapa metode untuk menyempurnakan konten sandi:

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 minimal. Misalnya:

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 maksimal upaya sandi gagal yang diizinkan sebelum perangkat dihapus total (yaitu, disetel ulang ke setelan pabrik). Misalnya:

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 sandi akan habis masa berlakunya, yakni dinyatakan dengan delta dalam milidetik dari saat admin perangkat menetapkan batas waktu masa berlaku. Misalnya:

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 ulang sandi lama. Metode ini menggunakan parameter panjang, yang menentukan jumlah sandi lama yang disimpan. Saat kebijakan ini aktif, pengguna tidak dapat memasukkan sandi baru yang cocok dengan n sandi terakhir. Hal ini mencegah pengguna dari menggunakan sandi yang sama berulang-ulang. Kebijakan ini biasanya digunakan bersama dengan setPasswordExpirationTimeout(), yang memaksa pengguna untuk memperbarui sandi setelah periode waktu yang ditentukan 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 maksimal waktu tidak aktif pengguna yang dapat berlalu sebelum perangkat terkunci. Misalnya:

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

Menjalankan penghapusan total data

Anda dapat menggunakan metode DevicePolicyManager wipeData() untuk menyetel ulang perangkat ke setelan pabrik. Hal ini berguna jika perangkat hilang atau dicuri. Sering kali, keputusan untuk menghapus total perangkat adalah hasil dari persyaratan 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;
    mDPM.wipeData(0);
    

Metode wipeData() menggunakan bitmask 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 atau tidak 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 mewajibkan enkripsi area penyimpanan, jika didukung.

Misalnya:

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.