Normal Permission — kategori izin di Android yang diberikan sistem secara otomatis tanpa meminta pengguna. Menurut Android Developer Documentation, 2024, izin normal memiliki ProtectionLevel normal dan tidak memerlukan dialog runtime, berbeda dengan izin berbahaya. Izin ini mencakup akses ke internet, status jaringan, dan getaran, tanpa menimbulkan risiko bagi data rahasia pengguna.
Poin Utama
Normal Permission — jenis izin sistem Android dengan ProtectionLevel normal, diberikan kepada aplikasi secara otomatis saat pemasangan. Pengembang tidak perlu menulis kode untuk permintaan — cukup mencantumkan izin di AndroidManifest.xml. Pengguna tidak melihat dialog dan tidak dapat mencabut normal permission secara terpisah, hanya dengan menghapus seluruh aplikasi.
Sistem Android mengklasifikasikan izin normal sebagai berisiko rendah — izin ini tidak memberikan akses ke data pribadi, kamera, atau mikrofon. Contoh tipikal: akses ke internet, manajemen getaran, membaca status Wi-Fi. Menurut Android Security Model (2024), sekitar 40 persen dari seluruh izin sistem termasuk dalam kategori normal.
Properti penting — izin normal tidak dicabut saat runtime melalui Settings. Jika pengguna ingin melarang akses, satu-satunya cara adalah menghapus aplikasi. Pengembang harus mempertimbangkan hal ini dalam arsitektur, tetapi bagi pengguna, pendekatan ini menyederhanakan interaksi: tidak ada dialog saat pertama kali dijalankan.
Pembagian menjadi izin normal dan berbahaya muncul di Android 6.0 Marshmallow (API 23). Sebelum versi ini, semua izin diminta saat pemasangan — pengguna melihat satu daftar dan menerima atau menolaknya secara keseluruhan. Normal Permission mempertahankan model ini untuk operasi berisiko rendah, sedangkan Dangerous beralih ke permintaan runtime. Perubahan ini meningkatkan pengalaman pengguna dan sekaligus meningkatkan keamanan.
Banyak API sistem Android memerlukan pencantuman eksplisit izin normal, meskipun aksesnya otomatis. Misalnya, kelas ConnectivityManager memerlukan ACCESS_NETWORK_STATE, VibratorService memerlukan VIBRATE, WifiManager memerlukan ACCESS_WIFI_STATE. Tanpa deklarasi uses-permission yang sesuai, pemanggilan API ini akan mengakibatkan SecurityException.
ProtectionLevel normal — tingkat perlindungan minimum dalam Android Permission System. Izin dengan tingkat ini dideklarasikan di manifes, dan sistem memeriksa deklarasi saat pemasangan, memberikan akses tanpa campur tangan pengguna. Tidak ada elemen UI yang ditampilkan, tidak ada callback yang dipanggil.
Mekanisme pemeriksaan bekerja di tingkat PackageManager. Saat pemasangan APK, sistem memindai semua tag uses-permission, menentukan tingkat perlindungan setiap izin melalui pencocokan dengan definisi sistem di file permissions.xml dan untuk normal-level cukup mendaftarkan akses. Prosesnya memakan waktu milidetik dan tidak memerlukan interaksi dengan antarmuka pengguna.
Algoritma pemberiannya sebagai berikut:
Pengguna tidak dapat mencabut izin normal melalui antarmuka. Di pengaturan aplikasi di bagian Izin, hanya izin berbahaya yang ditampilkan. Ini kontras dengan iOS, di mana setiap izin memerlukan konfirmasi terpisah terlepas dari tingkat sensitivitas fungsi.
Normal dan Dangerous Permission — dua kategori perlindungan yang berlawanan di Android. Perbedaan utama terletak pada cara pemberian: izin normal diberikan secara otomatis saat pemasangan, izin berbahaya memerlukan persetujuan eksplisit melalui dialog runtime. Perbedaan ini tertanam dalam arsitektur keamanan Android mulai versi 6.0 Marshmallow.
Perbandingan karakteristik utama:
| Karakteristik | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Permintaan pengguna | Tidak diperlukan | Dialog runtime wajib |
| Kemungkinan pencabutan | Tidak, hanya hapus aplikasi | Ya, melalui pengaturan kapan saja |
| Pemeriksaan dalam kode | Selalu PERMISSION_GRANTED | checkSelfPermission wajib |
| Contoh | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
Pengguna tidak melihat dialog apa pun saat permintaan Normal Permission. Jika aplikasi membutuhkan INTERNET — ia mendapatkannya secara diam-diam. Untuk Dangerous Permission, sistem menampilkan dialog modal dengan deskripsi akses yang diminta. Pengguna menekan Allow atau Deny, dan nantinya dapat mencabut izin kapan saja melalui Settings. Ini adalah perbedaan utama UX yang menentukan strategi pengembangan antarmuka.
Normal harus digunakan dalam semua kasus ketika akses tidak menyangkut data sensitif. ACCESS_NETWORK_STATE untuk memeriksa koneksi, VIBRATE untuk umpan balik taktil, INTERNET untuk permintaan HTTP — semuanya adalah izin normal. Menerapkan tingkat dangerous di mana normal sudah cukup adalah praktik buruk, menciptakan dialog yang tidak perlu dan mengurangi kepercayaan pengguna terhadap aplikasi.
Android mendefinisikan puluhan izin normal, masing-masing sesuai dengan fungsi sistem tertentu. Semuanya dapat diakses melalui konstanta kelas Manifest.permission. Berikut adalah daftar yang paling sering digunakan dalam pengembangan aplikasi.
| Konstanta | Akses | Deskripsi |
|---|---|---|
| INTERNET | Jaringan | Membuka soket jaringan untuk permintaan HTTP |
| ACCESS_NETWORK_STATE | Jaringan | Memperoleh informasi tentang status jaringan |
| ACCESS_WIFI_STATE | Wi-Fi | Membaca informasi tentang koneksi Wi-Fi |
| VIBRATE | Getaran | Mengontrol motor getaran perangkat |
| BLUETOOTH | Bluetooth | Terhubung ke perangkat Bluetooth |
| WAKE_LOCK | Catu daya | Mencegah prosesor masuk ke mode tidur |
| SET_ALARM | Alarm | Mengatur alarm melalui AlarmManager |
| CHANGE_NETWORK_STATE | Jaringan | Mengubah status koneksi jaringan |
Izin normal tidak dikelompokkan dalam Permission Group untuk tujuan tampilan di UI. Grup di Android ditujukan untuk layar pengaturan, di mana hanya izin berbahaya yang ditampilkan. Namun secara logis, izin normal dapat dibagi ke dalam kategori: jaringan (INTERNET, ACCESS_NETWORK_STATE), perangkat keras (VIBRATE, WAKE_LOCK), sistem (SET_ALARM) dan izin Bluetooth.
Beberapa konstanta dari Manifest.permission dapat mengubah tingkat perlindungan pada versi Android yang berbeda. Misalnya, BLUETOOTH_CONNECT pada Android 12+ menjadi izin berbahaya dengan permintaan runtime, meskipun di versi yang lebih lama adalah normal. Pengembang disarankan untuk memeriksa protectionLevel saat ini untuk API target melalui dokumentasi.
Pengembang dapat memeriksa secara terprogram apakah suatu izin normal melalui PackageManager. Metode getPermissionInfo mengembalikan PermissionInfo yang bidang protectionLevel-nya berisi bendera PermissionInfo.PROTECTION_NORMAL. Ini berguna untuk pemrosesan dinamis dan debugging.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Deklarasi Normal Permission di AndroidManifest.xml adalah operasi paling sederhana, hanya memerlukan satu tag uses-permission. Konfigurasi tambahan protectionLevel tidak diperlukan, karena tingkat perlindungan ditentukan oleh definisi sistem, bukan manifes aplikasi. Pengembang cukup mencantumkan nama lengkap konstanta.
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.VIBRATE" />
Sistem saat pemasangan memproses semua deklarasi. Jika setidaknya salah satu izin yang disebutkan memiliki protectionLevel selain normal, permintaan runtime akan diperlukan. INTERNET — izin normal paling populer, hadir di sebagian besar aplikasi Android, terutama yang melakukan permintaan HTTP atau memuat konten dari jaringan.
Contoh lengkap AndroidManifest.xml dengan izin normal dan berbahaya menunjukkan perbedaannya: secara sintaksis, tag uses-permission identik, tetapi pada tahap eksekusi, INTERNET dan VIBRATE akan diberikan secara otomatis, sedangkan CAMERA memerlukan dialog.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Normal permissions -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.VIBRATE" />
<!-- Dangerous permission -->
<uses-permission
android:name="android.permission.CAMERA" />
</manifest>
Saat menggunakan pustaka — Google Play Services, Firebase, Glide — pustaka tersebut dapat menambahkan uses-permission sendiri ke manifes akhir melalui Manifest Merger. Beberapa di antaranya normal (INTERNET untuk Firebase), lainnya berbahaya (ACCESS_FINE_LOCATION untuk Google Maps). Pengembang harus memeriksa manifes gabungan akhir di build/outputs/logs/manifest-merger-report.txt sebelum publikasi.
Normal Permission memiliki dua keterbatasan mendasar: ketidakmungkinan pencabutan oleh pengguna dan tidak adanya UI untuk manajemen. Jika pengguna tidak mempercayai aplikasi, tetapi izin normal sudah diberikan secara otomatis — satu-satunya jalan keluar adalah menghapus aplikasi. Ini menciptakan risiko tertentu, karena izin normal tidak diblokir oleh alat standar Android.
Keterbatasan tambahan muncul pada perangkat dengan beberapa profil (Work Profile, Multiple Users). Normal Permission diberikan segera untuk semua profil — aplikasi tidak dapat membatasi izin hanya untuk satu. Dalam skenario perusahaan, ini diselesaikan melalui Managed Configurations.
Tidak mungkin untuk memeriksa apakah aplikasi menggunakan Normal Permission saat ini. Metode sistem checkSelfPermission hanya berfungsi untuk izin berbahaya. Untuk normal, metode ini selalu mengembalikan PERMISSION_GRANTED, yang tidak mencerminkan aktivitas nyata. Ini harus dipertimbangkan saat audit keamanan dan analisis perilaku aplikasi.
Juga perlu diingat bahwa beberapa produsen perangkat (Xiaomi, Huawei, Samsung) memodifikasi perilaku standar izin. Pada firmware mereka, Normal Permission mungkin memerlukan izin tambahan di shell khusus MIUI atau EMUI. Pengembang disarankan untuk menguji pada perangkat nyata dari berbagai vendor.
Pertanyaan yang Sering Diajukan
Normal Permission diberikan secara otomatis saat pemasangan tanpa dialog. Dangerous memerlukan permintaan runtime dengan persetujuan eksplisit pengguna dan dapat dicabut melalui pengaturan. Normal menggunakan ProtectionLevel normal, Dangerous — protectionLevel dangerous.
Tidak, untuk izin normal cukup mendeklarasikan uses-permission di AndroidManifest.xml. Kode untuk permintaan tidak diperlukan — sistem memberikan akses secara otomatis. Ini membedakannya dari izin berbahaya yang memerlukan ActivityCompat.requestPermissions.
Yang paling sering digunakan: INTERNET (permintaan jaringan), ACCESS_NETWORK_STATE (pemeriksaan koneksi), VIBRATE (umpan balik taktil) dan WAKE_LOCK (menjaga prosesor tetap aktif). Hampir setiap aplikasi Android menggunakan setidaknya INTERNET.
Tidak, Normal Permission tidak dapat dicabut melalui pengaturan aplikasi. Satu-satunya cara untuk menghentikan akses adalah menghapus aplikasi. Ini adalah perbedaan utama dari izin berbahaya yang dapat dimatikan pengguna kapan saja.
Gunakan PackageManager.getPermissionInfo, berikan nama string izin. Metode mengembalikan PermissionInfo dengan bidang protectionLevel. Bandingkan dengan konstanta PermissionInfo.PROTECTION_NORMAL atau PROTECTION_DANGEROUS untuk menentukan kategori.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga