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 dan melihat opsi migrasi. Baca Penghentian admin perangkat.

Android menyertakan dukungan untuk aplikasi perusahaan dengan menawarkan Android Device Administration API. Device Administration API menyediakan administrasi sistem di tingkat sistem. API ini memungkinkan Anda membuat aplikasi sadar keamanan yang berguna dalam lingkungan perusahaan, di mana tim IT profesional membutuhkan kontrol yang besar atas perangkat karyawan. Misalnya, aplikasi Email Android bawaan telah memanfaatkan API ini untuk meningkatkan Dukungan Exchange. Melalui aplikasi Email, administrator Exchange dapat memberlakukan kebijakan {i>password<i} — termasuk {i>password<i} alfanumerik atau PIN — di seluruh perangkat. Administrator juga dapat menghapus total dari jarak jauh (yaitu, memulihkan bawaan pabrik ke) ponsel yang hilang atau dicuri. Pengguna Exchange dapat menyinkronkan data email dan kalender mereka.

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

Catatan Untuk informasi tentang cara membuat Kebijakan Kerja Pengontrol untuk penerapan Android for Work, lihat Buat Pengontrol Device Policy.

Mode Pemilik Perangkat Headless

Android 14 (level API 34) memperkenalkan mode Pengguna Sistem Headless (perangkat di yang mana UserManager.isHeadlessSystemUserMode menampilkan true). Dalam mode Headless System User, pengguna sistem adalah pengguna latar belakang dan mengandalkan pengguna latar depan tambahan untuk pengguna akhir interaksi. Android 14 juga memperkenalkan mode terafiliasi pemilik perangkat headless, yang menambahkan Pemilik Profil ke semua pengguna terafiliasi selain pengguna sistem tempat Pemilik Perangkat ditetapkan.

Di perangkat yang dikonfigurasi dengan pengguna sistem headless (saat pengguna sistem berjalan di latar belakang), hanya kebijakan perangkat yang memiliki cakupan global (kebijakan yang berlaku untuk semua pengguna) diterapkan untuk pengguna latar depan atau pengguna. Lihat addUserRestriction untuk mengetahui detailnya.

Produsen perangkat Android dapat merujuk pada panduan 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 menggunakan Device Administration API untuk menulis aplikasi admin perangkat yang diinstal di perangkat mereka. Aplikasi admin perangkat menerapkan kebijakan izin yang relevan. Begini caranya:

  • Administrator sistem menulis aplikasi admin perangkat yang memberlakukan kebijakan keamanan perangkat jarak jauh/lokal. Kebijakan-kebijakan ini dapat dikodekan ke dalam aplikasi, atau aplikasi dapat mengambil kebijakan dari pihak ketiga secara dinamis server tertentu.
  • Aplikasi tersebut diinstal di perangkat pengguna. Android melakukan saat ini tidak memiliki solusi penyediaan otomatis. Beberapa cara yang mungkin dilakukan oleh seorang {i>sysadmin<i} mendistribusikan aplikasi ke pengguna adalah sebagai berikut:
    • Google Play.
    • Mengaktifkan penginstalan dari toko lain.
    • Mendistribusikan aplikasi melalui tempat lain, seperti email atau situs.
  • Sistem meminta pengguna untuk mengaktifkan aplikasi admin perangkat. Cara dan kapan hal ini terjadi bergantung pada cara aplikasi diimplementasikan.
  • Setelah pengguna mengaktifkan aplikasi admin perangkat, mereka tunduk kepada kebijakannya. Mematuhi kebijakan tersebut biasanya akan memberi manfaat, seperti akses ke sistem dan data yang 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), terserah aplikasi untuk memutuskan bagaimana menangani hal ini. Namun, biasanya hal ini akan menyebabkan pengguna tidak dapat menyinkronkan data.

Jika perangkat mencoba terhubung ke server yang mengharuskan kebijakan yang didukung di Device Administration API, koneksi tidak akan diizinkan. Device Administration API saat ini tidak mengizinkan parsial penyediaan resource. Dengan kata lain, jika perangkat (misalnya, perangkat lama) melakukan tidak mendukung semua kebijakan yang dinyatakan, tidak ada cara untuk mengizinkan menghubungkan perangkat.

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

Untuk meng-uninstal aplikasi admin perangkat yang ada, pengguna harus pertama-tama membatalkan pendaftaran aplikasi sebagai administrator.

Kebijakan

Dalam lingkungan perusahaan, sering kali perangkat karyawan harus mematuhi seperangkat kebijakan ketat yang mengatur penggunaan perangkat. Tujuan Device Administration API mendukung kebijakan yang tercantum dalam Tabel 1. Perhatikan bahwa Device Administration API saat ini hanya mendukung sandi untuk layar kunci:

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. Sebagai contoh, Anda dapat mewajibkan PIN atau {i>password<i} untuk memiliki setidaknya enam karakter.
Sandi alfanumerik diperlukan Mengharuskan {i>password<i} 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 {i>password<i} untuk semua admin atau pengguna tertentu. Diperkenalkan di Android 3.0.
Jumlah huruf kecil minimal yang diperlukan dalam sandi Jumlah minimum huruf kecil huruf yang diperlukan dalam {i>password<i} 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 {i> password<i} 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 {i>password<i} mereka setelah jangka 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 akan menghapus total datanya. {i>Device Administration API<i} juga memungkinkan administrator untuk mengatur ulang perangkat ke setelan default pabrik dari jarak jauh. Cara ini mengamankan data perangkat hilang atau dicuri.
Kunci waktu tidak aktif maksimal Mengatur durasi waktu sejak pengguna terakhir kali menyentuh layar atau menekan tombol sebelum perangkat mengunci layar. Ketika ini terjadi, pengguna perlu memasukkan PIN atau {i>password<i} lagi sebelum mereka dapat menggunakan perangkat dan data akses. 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 ini tidak memiliki 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, Perangkat 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 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. Hal ini menyajikan pengguna dengan antarmuka pengguna yang memungkinkan mereka mengaktifkan aplikasi admin perangkat. Satu kali mereka telah mengaktifkan aplikasi, mereka dapat menggunakan tombol di antarmuka pengguna untuk melakukan hal berikut:

  • Menetapkan kualitas sandi.
  • Tentukan persyaratan sandi pengguna, seperti panjang minimum, jumlah minimum karakter numerik yang harus dikandungnya, dan seterusnya.
  • Menetapkan sandi. Jika kata sandi tidak sesuai dengan yang ditentukan kebijakan, sistem akan menampilkan pesan {i>error<i}.
  • Menyetel berapa kali upaya sandi gagal yang dapat terjadi sebelum perangkat dihapus (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). Hal ini mencegah pengguna menggunakan kembali salah satu dari n sandi terakhir yang sebelumnya mereka gunakan.
  • Menentukan bahwa area penyimpanan harus dienkripsi, jika perangkat mendukungnya.
  • Menyetel jumlah waktu tidak aktif maksimum 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 penegakan kebijakan keamanan perangkat jarak jauh/lokal. Bagian ini merangkum langkah-langkah yang diperlukan dalam membuat administrasi perangkat .

Membuat manifes

Untuk menggunakan Device Administration API, harus mencakup 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 tempat aplikasi contoh berada 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 tersebut.
    • android:label="@string/sample_device_admin" merujuk pada label yang dapat dibaca pengguna untuk izin akses tersebut.
    • android:description="@string/sample_device_admin_description" merujuk ke deskripsi izin yang dapat dibaca pengguna. Sebuah deskripsi biasanya lebih panjang dan lebih informatif daripada label.
  • android:permission="android.permission.BIND_DEVICE_ADMIN" adalah izin yang harus dimiliki subclass DeviceAdminReceiver miliki, untuk memastikan bahwa hanya sistem yang dapat berinteraksi dengan penerima (tidak ada aplikasi yang dapat diberi izin ini). Ini mencegah aplikasi lain menyalahgunakan aplikasi admin perangkat Anda.
  • android.app.action.DEVICE_ADMIN_ENABLED adalah varian utama tindakan yang harus ditangani subclass DeviceAdminReceiver agar diizinkan untuk mengelola perangkat. Ini diatur ke penerima ketika pengguna mengaktifkan aplikasi admin perangkat. Kode Anda biasanya menangani hal ini di onEnabled(). Agar didukung, penerima juga harus memerlukan izin BIND_DEVICE_ADMIN sehingga aplikasi lain tidak dapat menyalahgunakannya.
  • Saat pengguna mengaktifkan aplikasi admin perangkat, aplikasi ini akan memberi penerima izin untuk melakukan tindakan sebagai respons terhadap siaran sistem tertentu peristiwa. Saat peristiwa yang sesuai muncul, aplikasi dapat memberlakukan kebijakan. Sebagai misalnya, jika pengguna mencoba untuk menetapkan {i>password<i} baru yang tidak memenuhi kebijakan aplikasi dapat meminta pengguna untuk memilih sandi lain yang memenuhi persyaratan.
  • Hindari mengubah nama penerima setelah memublikasikan aplikasi. Jika nama dalam perubahan manifes, admin perangkat dinonaktifkan bila pengguna memperbarui aplikasi. Untuk mempelajari lebih lanjut, lihat <receiver>
  • android:resource="@xml/device_admin_sample" mendeklarasikan kebijakan keamanan yang digunakan dalam metadata. Metadata memberikan informasi tambahan informasi 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 mendesain aplikasi administrasi perangkat, Anda tidak perlu mencakup semua kebijakan, hanya yang relevan dengan aplikasi Anda.

Untuk diskusi lebih lanjut tentang file manifes, lihat Panduan Android Developers.

Mengimplementasikan kode

Device Administration API menyertakan class berikut:

DeviceAdminReceiver
Class dasar untuk mengimplementasikan komponen administrasi perangkat. Class ini menyediakan kemudahan untuk menafsirkan tindakan intent mentah yang dikirim oleh sistem file. 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 oleh pengguna telah diaktifkan. DevicePolicyManager mengelola kebijakan untuk satu atau beberapa instance DeviceAdminReceiver
DeviceAdminInfo
Class ini digunakan untuk menentukan metadata untuk komponen administrator perangkat.

Semua class ini memberikan fondasi untuk aplikasi administrasi perangkat yang berfungsi penuh. Bagian lainnya menjelaskan cara Anda menggunakan DeviceAdminReceiver dan DevicePolicyManager API 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.

Di subclass DeviceAdminReceiver-nya, aplikasi contoh hanya menampilkan notifikasi Toast sebagai respons terhadap peristiwa. 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 mengaktifkan aplikasi. Pengguna harus secara eksplisit mengaktifkan aplikasi untuk kebijakan yang harus ditegakkan. Jika pengguna memilih untuk tidak mengaktifkan aplikasi data akan tetap ada di perangkat, tetapi kebijakannya tidak akan diterapkan, dan pengguna tidak akan mendapatkan manfaat apa pun dari aplikasi tersebut.

Proses pengaktifan aplikasi dimulai ketika pengguna melakukan tindakan yang memicu ACTION_ADD_DEVICE_ADMIN intent. Di kolom aplikasi contoh, hal ini terjadi saat pengguna mengklik tombol Enable Admin.

Saat pengguna mengklik kotak centang Aktifkan Admin, tampilan perubahan 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. Tindakan ini memiliki efek yang memicu onPreferenceChange() . Callback ini dipanggil saat nilai Preference ini telah diubah oleh pengguna dan akan ditetapkan dan/atau dipertahankan. Jika pengguna mengaktifkan aplikasi, tampilan perubahan 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;
}

Garis intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) menyatakan bahwa mDeviceAdminSample (yaitu komponen DeviceAdminReceiver) adalah kebijakan target. Baris ini memanggil antarmuka pengguna yang ditunjukkan pada gambar 2, yang memandu pengguna menambahkan administrator perangkat ke sistem (atau mengizinkan mereka menolaknya).

Saat aplikasi perlu melakukan operasi yang bergantung pada saat aplikasi admin perangkat diaktifkan, ia mengonfirmasi bahwa aplikasi tersebut telah aktif. Untuk melakukannya, gunakan metode DevicePolicyManager isAdminActive(). Perhatikan bahwa DevicePolicyManager metode isAdminActive() mengambil DeviceAdminReceiver komponen 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 diterapkan pada perangkat. DevicePolicyManager mengelola kebijakan untuk satu instance DeviceAdminReceiver atau lebih.

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 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 dari konstanta DevicePolicyManager berikut:

PASSWORD_QUALITY_ALPHABETIC
Pengguna harus memasukkan {i>password<i} yang berisi setidaknya karakter alfabet (atau simbol lainnya).
PASSWORD_QUALITY_ALPHANUMERIC
Pengguna harus memasukkan sandi yang berisi setidaknya baik numerik dan alfabet (atau simbol lainnya).
PASSWORD_QUALITY_NUMERIC
Pengguna harus memasukkan sandi berisi minimal karakter numerik.
PASSWORD_QUALITY_COMPLEX
Pengguna harus memasukkan {i>password<i} yang berisi setidaknya huruf, angka, dan simbol khusus.
PASSWORD_QUALITY_SOMETHING
tertentu memerlukan beberapa sandi, tetapi tidak peduli.
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 mencakup metode yang memungkinkan Anda menyempurnakan isi {i>password<i}. Sebagai misalnya, Anda dapat menetapkan kebijakan yang menyatakan bahwa {i>password<i} harus berisi setidaknya n huruf besar. Berikut adalah metode untuk menyesuaikan konten:

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 {i>password<i} setidaknya harus berupa nilai minimum yang ditentukan paruh. 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 akan 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 dari Android 3.0, Anda dapat menggunakan setPasswordExpirationTimeout() untuk menyetel kapan sandi akan habis masa berlakunya, yang dinyatakan dengan delta dalam milidetik dari saat 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 dari Android 3.0, Anda dapat menggunakan setPasswordHistoryLength() metode untuk membatasi kemampuan untuk menggunakan ulang {i>password<i} lama. Metode ini membutuhkan panjang , yang menentukan berapa banyak {i>password<i} akan disimpan. Saat kebijakan ini aktif, pengguna tidak dapat memasukkan sandi yang cocok dengan n sandi terakhir. Hal ini mencegah pengguna agar tidak menggunakan {i>password<i} yang sama berulang kali. Kebijakan ini biasanya digunakan bersama dengan setPasswordExpirationTimeout(), yang memaksa pengguna untuk memperbarui {i>password<i} mereka setelah jangka 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 ketidakaktifan pengguna maksimum yang dapat terjadi sebelum penguncian perangkat. 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 perangkat adalah hasil dari kondisi tertentu yang terpenuhi. Misalnya, Anda dapat menggunakan setMaximumFailedPasswordsForWipe() untuk menyatakan bahwa perangkat harus dihapus setelah beberapa kali percobaan {i>password<i} gagal.

Hapus total data seperti berikut:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

Metode wipeData() menganggap parameter bit mask dari opsi tambahan. 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 dengan 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 dari Android 3.0, Anda dapat menggunakan 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 mengetahui contoh lengkap cara mengaktifkan enkripsi penyimpanan.

Contoh kode lainnya

Android AppRestrictionEnforcer dan DeviceOwner contoh akan menunjukkan lebih lanjut penggunaan API yang dibahas di halaman ini.