Gestire i permessi in Android non è più semplice come un tempo. Se prima bastava dichiarare tutto nel file AndroidManifest.xml, oggi l’utente ha il potere assoluto: può negare un permesso in qualsiasi momento, anche mentre l’app è aperta.
Permessi Normali vs Pericolosi
Android divide i permessi in due categorie principali basate sul rischio per la privacy dell’utente.
- Permessi Normali (Install-time): Questi vengono concessi automaticamente dal sistema all’installazione. Non disturbano l’utente perché non presentano rischi (es. accesso a Internet, Bluetooth, vibrazione).
- Permessi Pericolosi (Runtime): Questi richiedono l’approvazione esplicita dell’utente tramite un popup. Riguardano dati sensibili come la Posizione (GPS), la Fotocamera, i Contatti e il Microfono.
Il Flusso di Lavoro
Per implementare un permesso “pericoloso” (ad esempio la Fotocamera), devi seguire questi 4 step:
- Dichiarazione nel Manifest: È sempre il punto di partenza.
- Controllo (Check): Verificare se il permesso è già stato concesso.
- Richiesta (Request): Se manca, chiedere all’utente.
- Gestione Risposta: Capire se l’utente ha detto “Sì” o “No”.
Implementazione
Il modo moderno e consigliato da Google è l’uso di ActivityResultLauncher. Ecco come si scrive in Java:
Dichiarazione nel Manifest
<uses-permission android:name="android.permission.CAMERA" />
Il codice nell’Activity
public class MainActivity extends AppCompatActivity {
// 1. Definiamo il "Launcher" per la richiesta
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
// Permesso concesso! Puoi aprire la fotocamera.
openCamera();
} else {
// Permesso negato. Spiega all'utente perché la funzione non va.
Toast.makeText(this, "Permesso negato. Non posso scattare foto.", Toast.LENGTH_SHORT).show();
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn_camera);
btn.setOnClickListener(v -> checkAndRequestPermission());
}
private void checkAndRequestPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
openCamera();
} else {
// 2. Lanciamo la richiesta a runtime
requestPermissionLauncher.launch(Manifest.permission.CAMERA);
}
}
private void openCamera() { /* Logica per la fotocamera */ }
}
Conclusione
Il sistema dei permessi è lì per proteggere l’utente, ma per noi sviluppatori Java significa scrivere codice più “difensivo”. Ricorda sempre: Verifica sempre il permesso prima di eseguire l’azione, non dare mai per scontato che sia ancora attivo!

