Android Kiosk Mode yang Benar: Device Owner, Lock Task, Watchdog

Android Kiosk Mode yang Benar: Device Owner, Lock Task, Watchdog
Yang membedakan kiosk dari mainan bukan hardware-nya. Disiplin lockdown-nya. TV box, tablet, dan panel all-in-one Android kelas konsumer itu murah, kemampuannya cukup, dan barangnya gampang dicari di pasar Indonesia. Wajar kalau photobooth, player signage, dan kiosk self-service dibangun di atasnya.
Tapi perangkat yang ditinggal setahun di mal pasti kena usil: layarnya dipencet-pencet, kabelnya dicabut, sesekali ada yang menancapkan USB keyboard. Kiosk yang benar harus kebal semua itu.
Device owner, bukan sekadar ganti launcher
Cara murahnya: pasang aplikasi "kiosk launcher", jadikan home screen default, lalu berharap semuanya aman. Cara ini gagal, dan gagalnya bisa ditebak. Status bar masih bisa ditarik turun. Boot ke safe mode melompati launcher begitu saja.
Tombol recents membuka aplikasi lain. USB keyboard membuka shortcut yang tidak pernah terpikirkan. Ganti launcher itu urusan tampilan, bukan pagar keamanan.
Jalur yang benar: provisioning device owner. Anggap saja ini kunci master gedung, bukan kunci satu pintu. Begitu terpasang, ia memegang seluruh perangkat — bukan cuma apa yang tampil di layar.
Provisioning cuma bisa dilakukan di perangkat yang masih kosong dari pabrik:
lewat QR code saat setup awal, atau lewat adb shell dpm set-device-owner
untuk perangkat yang disiapkan di meja kerja. Android hanya memberikan peran
ini ke perangkat yang belum dikonfigurasi apa-apa. Setelah aktif, kendali
yang memang dibutuhkan kiosk terbuka semua: whitelist paket lock task,
sembunyikan status bar, blokir safe mode, matikan USB debugging dan factory
reset, pasang update tanpa dialog.
Kerjakan semuanya di meja, sebelum perangkat berangkat ke lokasi. Device owner tidak bisa disusulkan di lapangan — perangkatnya harus di-wipe dulu.
Lock task mode
Dengan device owner terpasang, aplikasi kiosk berjalan di lock task mode yang asli — bukan screen pinning. Screen pinning memang dirancang supaya pengguna bisa keluar sendiri. Lock task dengan whitelist device owner tidak: tombol home mati, recents mati, notification shade tidak bisa ditarik, dialog sistem tidak bisa muncul di atas UI Anda. Perilaku tombol power dan volume pun bisa diatur.
Perangkat menyala, RECEIVE_BOOT_COMPLETED terpicu, aplikasi kiosk langsung
jalan dalam keadaan terkunci. Launcher tidak pernah kelihatan sedetik pun —
termasuk di sepuluh detik pertama setelah boot, momen ketika solusi murahan
justru memamerkan home screen-nya.
Watchdog
Tidak ada orang yang berdiri di samping mesin untuk memencet restart. Padahal aplikasi pasti mati suatu saat — crash, ANR, WebView yang menghabiskan heap, handshake HDMI yang menggantung. Karena itu pemulihan harus berlapis: tiap lapisan menangkap apa yang lolos dari lapisan di atasnya.
Praktiknya tidak rumit. Aplikasi mengirim heartbeat ke watchdog service kecil di proses terpisah; begitu heartbeat hilang melewati ambang batas, aplikasi di-relaunch. Reboot terjadwal tiap malam ikut membersihkan kebocoran memori pelan — jenis bug yang tidak akan pernah di-debug siapa pun di perangkat yang berdiri di tengah mal.
Satu lagi: laporkan setiap kejadian pemulihan ke backend. Perangkat yang sampai restart sendiri dua kali sehari itu tanda ada masalah yang lebih dalam. Jangan didiamkan.
Remote recovery
Begitu satu perangkat menuntut orang datang ke lokasi membawa USB keyboard, hitungan ekonomi seluruh unit di lapangan langsung berantakan. Karena itu setiap kiosk wajib membawa command channel — MQTT, FCM, atau polling biasa — yang bisa me-restart aplikasi, me-reboot perangkat, membersihkan data aplikasi, menarik log, dan mengambil screenshot dari jauh.
Sembilan puluh persen masalah lapangan beres dengan restart aplikasi dari jauh. Sisanya sebagian besar beres dengan reboot. Kunjungan ke lokasi itu jalan terakhir — rancang sistemnya supaya jalan itu hampir tidak pernah dipakai. Sisi backend dari channel ini polanya sama dengan perangkat lapangan mana pun; lihat panduan lengkap backend IoT.
Update OTA tanpa mem-brick semua unit
Device owner membolehkan update dipasang tanpa dialog apa pun. Kemampuan yang sama juga sanggup mem-brick semua kiosk sekaligus — cukup satu push yang ceroboh.
Disiplinnya begini. Rollout bertahap per ring: segelintir unit canary dulu, baru sisanya menyusul. Jadwalkan update di jam tutup. Cek checksum APK sebelum dipasang.
Simpan APK versi sebelumnya di disk. Aplikasi yang gagal mencapai kondisi sehat setelah update berarti satu hal: rollback otomatis, tanpa menunggu keputusan orang.
Watchdog sudah tahu seperti apa kondisi sehat itu. Tinggal dipakai ulang sebagai penentu nasib update.
Masalah fisik: listrik dan burn-in layar
Dua masalah yang tidak akan selesai oleh software sepintar apa pun:
- Listrik. Anggap pemadaman pasti terjadi. Set board supaya menyala sendiri begitu listrik kembali — di kebanyakan box, ini setelan BIOS atau PMIC — dan pastikan jalur boot berakhir di aplikasi kiosk yang terkunci, tanpa satu prompt pun. Kiosk yang menunggu jari orang menekan tombol power sehabis mati lampu akan offline terus sampai ada yang mampir ke lokasi.
- Burn-in layar. UI statis di panel murah membekas permanen dalam hitungan bulan. Obatnya murah: geser elemen statis beberapa piksel secara berkala, redupkan layar di jam sepi, dan matikan layar total semalaman dengan alarm untuk menyalakannya lagi. Jauh lebih murah dibanding mengganti panel di semua unit.
Intinya
Kiosk mode itu tumpukan lapisan. Device owner fondasinya. Lock task pagarnya. Watchdog berlapis sistem imunnya. Command channel tim lapangannya. OTA yang disiplin duduk paling atas.
Bolong satu lapisan saja, dan dalam satu kuartal bolongnya pasti berujung insiden. Ini baru separuh cerita. Separuh lainnya — konten apa yang sebenarnya diputar perangkat-perangkat terkunci ini, dan bagaimana ratusan unit dikelola sehari-hari — ada di mengelola banyak Android TV box untuk signage.
Mau bangun hal serupa?
Jasa Pengembangan Backend IoT & Integrasi Multi-Protokol
Backend yang menyerap telemetri perangkat lintas MQTT, WebSocket, Modbus, dan BLE, lalu menyatukannya jadi dashboard real-time yang andal.
Lihat cara saya bisa bantu