Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PermissionDispatcher per la gestione dei permessi

PermissionDispatcher. Impariamo ad utilizzare questa libreria come soluzione per gestire i permessi in un'applicazione per il sistema operativo Android.
PermissionDispatcher. Impariamo ad utilizzare questa libreria come soluzione per gestire i permessi in un'applicazione per il sistema operativo Android.
Link copiato negli appunti

Riprendiamo l'esempio visto nel paragrafo precedente e proviamo ora a scriverlo con l'uso di PermissionDispatcher. PermissionDispatcher richiede di annotare l'activity che richiede il permesso e il metodo che richiede il permesso con due annotazioni: @RuntimePermissions e @NeedsPermission. Quest'ultima annotazione richiedeun elenco di permessi necessari al metodo (nel nostro caso è solo uno).

@RuntimePermissions
public class MainActivity extends AppCompatActivity {
    /**
     * Metodo associato all'evento click di un pulsante che richiede l'uso della CAMERA
     */
    @NeedsPermission(Manifest.permission.CAMERA)
    void showCamera() {
        // utilizza permesso
    }
    // Bisogna visualizzare dialog per richiedere il permesso?
    @OnShowRationale(Manifest.permission.CAMERA)
    void showRationaleForCamera(final PermissionRequest request) {
        new AlertDialog.Builder(this)
        .setMessage(R.string.permission_camera_rationale)
        .setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
        .setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
        .show();
    }
    // permesso rifiutato
    @OnPermissionDenied(Manifest.permission.CAMERA)
    void showDeniedForCamera() {
        Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
    }
    @OnNeverAskAgain(Manifest.permission.CAMERA)
    void showNeverAskForCamera() {
        Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();
    }
}

PermissionDispatcher: funzionamento

Permission Dispatcher usa un processore di annotazione e delle annotazioni per generare per noi il codice necessario a gestire il flusso delle operazioni necessarie a gestire correttamente i permessi a partire da Android 6.0.

E' bene tener presente che la libreria funziona anche per le versioni del robottino verde inferiori alla 6.0. In questo ultimo caso, la libreria considererà sempre come accettata la richiesta dei permessi. Vediamo ora le principali annotazioni che la libreria mette a disposizione:

  • @RuntimePermissions: Abilita un fragment o una activity a gestire i permessi
  • @RuntimePermissions
    public class MainActivity extends AppCompatActivity {
        ...
    }
  • @NeedsPermission: specifica che il metodo decorato con questa annotazione necessita del permesso indicato come parametro dell'annotazione stessa. E' consentito richiedere uno o più permessi.

    @NeedsPermission(Manifest.permission.CAMERA)
    public void showCamera() {
        // utilizza permesso
    }
  • @OnShowRationale: può essere utilizzato per visualizzare una dialog nella quale viene spiegato perché l'applicazione sta richiedendo tale permesso

    @OnShowRationale(Manifest.permission.CAMERA)
    void showRationaleForCamera(final PermissionRequest request) {
        new AlertDialog.Builder(this)
            .setMessage(R.string.permission_camera_rationale)
            .setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
            .setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
            .show();
    }

  • @OnPermissionDenied: è un'annotazione usata sul metodo che deve gestire il caso in cui l'utente nega il permesso richiesto.
  • @OnNeverAskAgain: è l'annotazione usata per decorare il metodo che gestisce il caso in cui l'utente ha selezionato il checkbox "non chiederlo più" nella dialog per la richiesta del permesso.

Il processore di annotazione quando trova un componente di tipo activity o fragment annotato con @RuntimePermissions, genera in automatico una classe per la gestione dei permessi aggiungendo al suo nome il prefisso PermissionsDispatcher.

Per fare un esempio di quanto appena detto: per una activity denominata ContactActivity, la classe generata avrà il nome ContactActivityPermissionsDispatcher.

La classe generata deve essere usata in fase di creazione e di distruzione dell'activity o del fragment con un codice simile a quello riportato:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button_camera).setOnClickListener(v - > {
    // NOTE: delegate the permission handling to generated method
    MainActivityPermissionsDispatcher.showCameraWithPermissionCheck(this);
    });
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    // NOTE: delegate the permission handling to generated method
    MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}

PermissionDispatcher è disponibile su GitHub indirizzo. In allegato all'articolo si trova un progetto d'esempio che illustra come utilizzare questa libreria per gestire i permessi in un'applicazione.

Ti consigliamo anche