Android menyediakan Permission Manager yang memungkinkan aplikasi meminta izin kepada pengguna secara dinamis. Sejak Android 6.0 (Marshmallow), model izin berubah menjadi runtime permissions , yaitu pengguna harus memberi persetujuan ketika aplikasi pertama kali membutuhkan fitur tertentu, bukan hanya saat instalasi.
Android membagi izin menjadi dua kategori utama:
INTERNET). Sistem otomatis memberi persetujuan saat aplikasi dipasang.CAMERA, READ_CONTACTS). Pengguna harus menyetujui secara eksplisit melalui Permission Manager.Sebelum meminta izin di runtime, Anda harus mendeklarasikan izin tersebut di AndroidManifest.xml:
<manifest ...> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> ... </manifest> Tanpa deklarasi ini, permintaan runtime akan selalu gagal.
Gunakan ContextCompat.checkSelfPermission() untuk memeriksa apakah izin sudah diberikan:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { // Izin sudah ada, jalankan fungsi kamera } else { // Izin belum ada, minta izin } Jika izin belum diberikan, panggil ActivityCompat.requestPermissions(). Contoh pada sebuah Activity:
private static final int REQUEST_CAMERA = 101; private void requestCameraPermission() { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA); } Override metode onRequestPermissionsResult() di Activity atau Fragment untuk menangani respons pengguna:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CAMERA) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Izin diterima, jalankan kamera } else { // Izin ditolak if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { // Tampilkan penjelasan mengapa aplikasi membutuhkan izin showPermissionExplanation(); } else { // Pengguna menandai Jangan tanya lagi . Arahkan ke pengaturan. openAppSettings(); } } } } Jika pengguna menolak izin tetapi tidak memilih Jangan tanya lagi , beri penjelasan singkat sebelum meminta kembali. Contoh menggunakan AlertDialog:
private void showPermissionExplanation() { new AlertDialog.Builder(this) .setTitle("Izin Kamera Diperlukan") .setMessage("Aplikasi ini membutuhkan akses kamera untuk mengambil foto. Silakan izinkan.") .setPositiveButton("Izinkan", (dialog, which) -> requestCameraPermission()) .setNegativeButton("Batal", null) .create() .show(); } Jika pengguna menolak dengan Jangan tanya lagi , satu satunya cara memperoleh izin adalah dengan mengarahkan mereka ke halaman pengaturan aplikasi.
private void openAppSettings() { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); } ActivityResultContracts.RequestPermission menyediakan cara yang lebih bersih untuk menangani izin.Berikut contoh singkat menggunakan registerForActivityResult:
private final ActivityResultLauncher requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { if (isGranted) { // Izin diberikan, jalankan fungsi } else { // Izin ditolak, beri penjelasan atau alihkan ke pengaturan } }); private void requestCameraPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { // Sudah punya izin } else if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) { showPermissionExplanation(); } else { requestPermissionLauncher.launch(Manifest.permission.CAMERA); } } Permission Manager adalah komponen penting untuk menjaga privasi pengguna sekaligus memungkinkan aplikasi memanfaatkan fitur perangkat. Dengan mengikuti langkah langkah di atas menambahkan izin di manifest, memeriksa status izin, meminta izin secara runtime, serta menangani penolakan secara elegan Anda dapat membangun aplikasi Android yang aman, transparan, dan ramah pengguna.