web-dev-qa-db-fra.com

Android autorisations: effectuer la tâche après que l'utilisateur a appuyé sur "Autoriser"

Je voudrais savoir s'il existe un moyen d'identifier l'événement lorsque l'utilisateur a appuyé sur le bouton "Autoriser" pour l'accès aux coordonnées/l'accès au calendrier, etc.,

Je sais qu'il existe un moyen de demander des autorisations avec ActivityCompat.requestPermissions, mais existe-t-il un moyen d'effectuer une action juste après que l'utilisateur accorde une autorisation?

18
Katakam Nikhil

Définissez d'abord la variable:

public static int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;

demander l'autorisation en utilisant:

if (ActivityCompat.checkSelfPermission(this,
        Android.Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Android.Manifest.permission.ACCESS_FINE_LOCATION)) {
        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.
    } else {
        // No explanation needed, we can request the permission.
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

attrapez maintenant le résultat en utilisant:

     @Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION : {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.
                Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show();

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

POUR FRAGMENT

si vous essayez ce code dans un fragment, changez

checkSelfPermission()

à

ActivityCompact.checkSelfPermission()

et aussi changer

ActivityCompat.requestPermissions()

à

requestPermissions()

La gestion du résultat de l'autorisation (Autoriser ou Refuser) est identique à l'activité.

Pour un exemple plus complet, voyez ceci Répondez ici

29
rafsanahmad007

J'ai utilisé ce code à cette fin.

   public boolean isPermissionGranted() {

    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG, "Permission is granted");
            return true;
        } else {
            ActivityCompat.requestPermissions(this, new String[]{
                    Manifest.permission.CAMERA
            }, 1);
            return false;
        }
    } else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG, "Permission is granted");
        return true;
    }

}

Vous pouvez ensuite appeler:

    if(isPermissionGranted())
    {
       // do your stuff
    }
3
MezzDroid

Appelez requestPermissions() pour demander les autorisations. Vous trouvez le résultat dans onRequestPermissionsResult() et pouvez déterminer s'ils ont accordé l'autorisation ou non. C'est "juste après", du point de vue du code de votre application.

1
CommonsWare