Android: Permessi

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!

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Share via
Copy link