Panduan developer ini menjelaskan cara mengunci perangkat khusus ke satu atau sekumpulan aplikasi. Jika Anda adalah pemilik pengelolaan mobilitas perusahaan (EMM) developer atau integrator solusi baca panduan ini untuk menambahkan mode mengunci tugas ke solusi.
Ringkasan
Android dapat menjalankan tugas secara imersif, seperti kios yang disebut tugas kunci mode. Anda mungkin menggunakan mode kunci tugas jika Anda mengembangkan aplikasi kios atau peluncur untuk menyajikan kumpulan aplikasi. Saat sistem berjalan saat mengunci tugas mode, pengguna perangkat biasanya tidak dapat melihat notifikasi, mengakses notifikasi yang tidak diizinkan aplikasi, atau kembali ke layar utama (kecuali layar utama diizinkan).
Hanya aplikasi yang telah diizinkan oleh pengendali kebijakan perangkat (DPC) yang dapat berjalan saat sistem berada dalam mode kunci tugas. Aplikasi diizinkan karena orang tersebut menggunakan perangkat tidak selalu bisa meninggalkan mode kunci tugas.
Cara Anda menggabungkan aplikasi yang diizinkan untuk mode mengunci tugas dan DPC yang diberi akses akan tergantung pada masalah yang ingin Anda pecahkan. Berikut beberapa contohnya:
- Paket aplikasi tunggal yang menggabungkan kios (untuk menampilkan konten) dan DPC mini (untuk mengizinkan dirinya sendiri untuk mode mengunci tugas).
- DPC yang merupakan bagian dari solusi pengelolaan mobilitas perusahaan, yang meluncurkan aplikasi seluler pelanggan dalam mode mengunci tugas.
Ketersediaan
Sistem dapat berjalan dalam mode mengunci tugas di Android 5.0 atau yang lebih baru. Tabel 1 menunjukkan versi Android mana yang mendukung pemberian izin aplikasi berdasarkan pengguna.
Versi Android | DPC mengelola | Catatan |
---|---|---|
Android 5.0 (API Level 21) atau yang lebih tinggi | Perangkat yang sepenuhnya dikelola | |
Android 8.0 (level API 26) atau yang lebih tinggi | Pengguna sekunder terafiliasi | Pengguna sekunder harus berafiliasi dengan pengguna utama. Lihat ringkasan beberapa pengguna. |
Android 9.0 (level API 28) atau yang lebih tinggi | Pengguna sekunder |
Di Android 9.0 atau yang lebih baru, DPC dapat memulai aktivitas aplikasi apa pun ke mode mengunci tugas. Dalam versi sebelumnya, aplikasi harus sudah mendukung proses memulai aktivitasnya sendiri di mode mengunci tugas.
Daftar aplikasi yang diizinkan
DPC harus mengizinkan aplikasi sebelum dapat digunakan dalam mode mengunci tugas. Telepon
DevicePolicyManager.setLockTaskPackages()
ke
mengizinkan aplikasi untuk mode mengunci tugas seperti yang ditampilkan dalam contoh berikut:
Kotlin
// Allowlist two apps. private val KIOSK_PACKAGE = "com.example.kiosk" private val PLAYER_PACKAGE = "com.example.player" private val APP_PACKAGES = arrayOf(KIOSK_PACKAGE, PLAYER_PACKAGE) // ... val context = context val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminName = getComponentName(context) dpm.setLockTaskPackages(adminName, APP_PACKAGES)
Java
// Allowlist two apps. private static final String KIOSK_PACKAGE = "com.example.kiosk"; private static final String PLAYER_PACKAGE = "com.example.player"; private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE}; // ... Context context = getContext(); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName adminName = getComponentName(context); dpm.setLockTaskPackages(adminName, APP_PACKAGES);
Untuk mengetahui aplikasi yang sebelumnya diizinkan untuk mode mengunci tugas, DPC dapat memanggil
DevicePolicyManager.getLockTaskPackages()
Yang lain
aplikasi bisa memanggil
DevicePolicyManager.isLockTaskPermitted()
untuk mengonfirmasi
bahwa paket aplikasi mendukung
mode kunci tugas.
Mulai mode mengunci tugas
Di Android 9.0 (API level 28) atau yang lebih tinggi, Anda dapat memulai aktivitas aplikasi lain di
mode mengunci tugas. Jika suatu aktivitas sudah berjalan di latar depan atau
latar belakang, Anda perlu meluncurkan kembali aktivitas tersebut. Telepon
ActivityOptions.setLockTaskEnabled()
dan menyediakan
pilihan ketika memulai aktivitas. Cuplikan berikut menunjukkan salah satu cara untuk
lakukan ini:
Kotlin
// Set an option to turn on lock task mode when starting the activity. val options = ActivityOptions.makeBasic() options.setLockTaskEnabled(true) // Start our kiosk app's main activity with our lock task mode option. val packageManager = context.packageManager val launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE) if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()) }
Java
// Set an option to turn on lock task mode when starting the activity. ActivityOptions options = ActivityOptions.makeBasic(); options.setLockTaskEnabled(true); // Start our kiosk app's main activity with our lock task mode option. PackageManager packageManager = context.getPackageManager(); Intent launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE); if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()); }
Di versi Android sebelum 9.0, aplikasi memulai aktivitasnya sendiri dalam tugas kunci
dengan memanggil Activity.startLockTask()
. Untuk memanggilnya
, aktivitas harus berjalan di latar depan (lihat Aktivitas-siklus proses
utama) jadi sebaiknya panggil metode
Metode onResume()
dari Activity
atau
Fragment
. Berikut cara memanggil startLockTask()
:
Kotlin
// In our Fragment subclass. override fun onResume() { super.onResume() // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.packageName)) { activity.startLockTask() } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Java
// In our Fragment subclass. @Override public void onResume() { super.onResume(); // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.getPackageName())) { getActivity().startLockTask(); } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Jangan mulai mode mengunci tugas saat perangkat terkunci karena pengguna mungkin tidak
dapat membuka kunci perangkat. Anda dapat memanggil metode KeyguardManager
untuk
mencari tahu apakah perangkat terkunci dan menggunakan siklus proses Activity
(seperti onResume()
yang dipanggil setelah membuka kunci) untuk
memulai mode mengunci tugas.
Aplikasi dalam mode mengunci tugas bisa memulai aktivitas baru selama aktivitas tersebut tidak memulai tugas baru—kecuali tugas yang meluncurkan aplikasi yang diizinkan. Kepada memahami bagaimana tugas berkaitan dengan aktivitas, baca panduan Memahami Tugas dan Data Sebelumnya.
Atau, Anda dapat mendeklarasikan di manifes aplikasi
file cara perilaku aktivitas saat
sistem berjalan dalam
mode kunci tugas. Agar sistem berjalan secara otomatis
aktivitas Anda dalam mode mengunci tugas, setel
android:lockTaskMode
ke if_whitelisted
sebagai
yang ditunjukkan dalam contoh berikut:
<activity
android:name=".MainActivity"
android:lockTaskMode="if_whitelisted">
<!-- ... -->
</activity>
Anda bisa mempelajari lebih lanjut tentang mendeklarasikan
opsi di file manifes aplikasi, dengan membaca
referensi lockTaskMode
.
Hentikan mode mengunci tugas
DPC dapat menghentikan mode mengunci tugas dari jarak jauh dengan menghapus paket aplikasi dari
daftar yang disetujui. Telepon
DevicePolicyManager.setLockTaskPackages()
, di
Android 6.0 (API level 23) atau yang lebih baru, dan menghilangkan nama paket dari
daftar yang diizinkan. Saat Anda memperbarui daftar yang diizinkan, aplikasi akan kembali ke versi sebelumnya
tugas dalam tumpukan.
Jika aktivitas sebelumnya disebut startLockTask()
, aktivitas dapat memanggil
Activity.stopLockTask()
untuk menghentikan mode mengunci tugas. Metode ini
hanya berfungsi untuk aktivitas yang memulai mode mengunci tugas.
Callback siklus proses
DPC Anda mungkin merasa terbantu jika mengetahui kapan aplikasi (berjalan di pengguna yang sama)
masuk dan keluar dari mode mengunci tugas. Untuk menerima callback, ganti kode berikut
metode callback di subclass DeviceAdminReceiver
DPC:
onLockTaskModeEntering()
- Dipanggil setelah aplikasi memasuki mode mengunci tugas. Anda bisa mendapatkan
nama paket sebuah
aplikasi dari argumen
pkg
. onLockTaskModeExiting()
- Dipanggil setelah aplikasi keluar dari mode mengunci tugas. Callback ini tidak menerima informasi aplikasi.
Jika Anda meluncurkan aplikasi lain ke dalam mode mengunci tugas, Anda perlu melacak
status di aplikasi Anda sendiri. Untuk memeriksa apakah aplikasi saat ini berjalan di tugas kunci
gunakan metode di ActivityManager
seperti yang ditunjukkan berikut
contoh:
Kotlin
// Check if this app is in lock task mode. Screen pinning doesn't count. var isLockTaskModeRunning = false val activityManager = context .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode } if (isLockTaskModeRunning) { // Show the exit button ... }
Java
// Check if this app is in lock task mode. Screen pinning doesn't count. boolean isLockTaskModeRunning = false; ActivityManager activityManager = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_LOCKED; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode(); } if (isLockTaskModeRunning) { // Show the exit button ... }
Menyesuaikan UI
Saat aplikasi berjalan dalam mode mengunci tugas, antarmuka pengguna (UI) sistem akan berubah cara berikut:
- Status bar kosong dengan notifikasi dan informasi sistem tersembunyi.
- Tombol Beranda dan Ringkasan disembunyikan.
- Aplikasi lain tidak dapat meluncurkan aktivitas baru.
- Layar kunci (jika disetel) dinonaktifkan.
Di Android 9.0 atau yang lebih tinggi, jika mode mengunci tugas diaktifkan, DPC dapat mengaktifkan
fitur UI sistem tertentu pada perangkat—berguna bagi developer yang membuat
peluncur. Telepon
DevicePolicyManager.setLockTaskFeatures()
seperti yang ditunjukkan
dalam cuplikan berikut:
Kotlin
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures( adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME or DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW)
Java
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures(adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME | DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);
Sistem akan menonaktifkan fitur apa pun yang tidak Anda sertakan dalam argumen flags
. Tujuan
fitur UI yang diaktifkan akan tetap ada di antara peluncuran ke dalam mode mengunci tugas. Jika perangkat
sudah dalam mode mengunci tugas, setiap perubahan yang
Anda buat pada fitur mengunci tugas
langsung ditampilkan. Tabel 2 menjelaskan fitur UI yang dapat Anda sesuaikan.
Fitur UI sistem | Deskripsi |
---|---|
LOCK_TASK_FEATURE_HOME
|
Menampilkan tombol Beranda. Aktifkan untuk peluncur kustom—mengetuk tombol yang diaktifkan Tombol layar utama tidak memiliki tindakan, kecuali jika Anda mengizinkan Android default peluncur. |
LOCK_TASK_FEATURE_OVERVIEW
|
Menampilkan tombol Ringkasan (mengetuk tombol ini akan membuka Terbaru). Jika Anda mengaktifkan tombol ini, Anda juga harus mengaktifkan tombol Beranda. |
LOCK_TASK_FEATURE_GLOBAL_ACTIONS
|
Mengaktifkan dialog tindakan global yang muncul saat menekan lama
tombol daya. Satu-satunya fitur yang
diaktifkan saat
setLockTaskFeatures()
belum dipanggil. Pengguna biasanya tidak dapat mematikan perangkat jika Anda
menonaktifkan dialog ini. |
LOCK_TASK_FEATURE_NOTIFICATIONS
|
Mengaktifkan notifikasi untuk semua aplikasi. Ini menampilkan ikon notifikasi di status bar, notifikasi peringatan dini, dan menu notifikasi yang dapat diluaskan. Jika Anda mengaktifkan tombol ini, Anda juga harus mengaktifkan tombol Beranda. Mengetuk tombol dan tindakan notifikasi yang membuka panel baru, tidak berfungsi saat terkunci mode tugas. |
LOCK_TASK_FEATURE_SYSTEM_INFO
|
Mengaktifkan area info sistem bilah status yang berisi indikator seperti sebagai opsi konektivitas, baterai, serta suara dan getaran. |
LOCK_TASK_FEATURE_KEYGUARD
|
Mengaktifkan layar kunci yang mungkin disetel di perangkat. Biasanya tidak cocok untuk perangkat dengan pengguna publik seperti kios informasi atau reklame digital. |
LOCK_TASK_FEATURE_NONE
|
Menonaktifkan semua fitur UI sistem yang tercantum di atas. |
DPC dapat memanggil
DevicePolicyManager.getLockTaskFeatures()
untuk mendapatkan
daftar fitur yang tersedia di perangkat saat
mode kunci tugas diaktifkan. Kapan
perangkat keluar dari mode mengunci tugas, antarmuka pengguna kembali ke status
oleh kebijakan perangkat yang ada.
Blokir jendela dan overlay
Saat aplikasi berjalan dalam mode mengunci tugas, aplikasi lain dan layanan latar belakang dapat
membuat jendela baru yang ditampilkan Android di depan aplikasi dalam mode mengunci tugas.
Aplikasi dan layanan membuat jendela ini untuk menampilkan toast, dialog, dan overlay ke
pengguna yang menggunakan perangkat. DPC Anda dapat mencegahnya dengan menambahkan
Batasan pengguna DISALLOW_CREATE_WINDOWS
.
Contoh berikut menunjukkan cara melakukannya dalam
Callback onLockTaskModeEntering()
:
Kotlin
// Called just after entering lock task mode. override fun onLockTaskModeEntering(context: Context, intent: Intent) { val dpm = getManager(context) val admin = getWho(context) dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS) }
Java
// Called just after entering lock task mode. public void onLockTaskModeEntering(Context context, Intent intent) { DevicePolicyManager dpm = getManager(context); ComponentName admin = getWho(context); dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS); }
DPC Anda dapat menghapus batasan pengguna saat perangkat keluar dari mode mengunci tugas.
Referensi lainnya
Untuk mempelajari perangkat khusus lebih lanjut, baca dokumen berikut:
- Panduan terkait perangkat khusus dengan contoh lebih lanjut untuk membatasi perangkat seluler dan meningkatkan pengalaman pengguna.
- Ringkasan perangkat khusus adalah ringkasan dari perangkat yang terdedikasi.
- Di artikel Mengelola beberapa pengguna, Anda dapat melihat cara berbagi perangkat antar-perangkat pelanggan.