Search code examples
androidandroid-permissions

Android permissions: Perform task after user pressed "Allow"


I would like to know if there is a way we can identify the event when the user has pressed "Allow" button for contact details access/ calendar access etc.,

I know there is a way to ask for permissions with the ActivityCompat.requestPermissions but is there a way to perform an action right after the user grants a permission?


Solution

  • First Define the variable:

    public static int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
    

    …then use the following code copied from http://web.archive.org/web/20160111030837/http://developer.android.com/training/permissions/requesting.html

    request permission using:

    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.
        } }
    

    now catch the result using:

         @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
        } }
    

    FOR FRAGMENT

    if you are trying this code in a fragment, change

    checkSelfPermission()

    to

    ActivityCompact.checkSelfPermission()

    and Also change

    ActivityCompat.requestPermissions()

    to

    requestPermissions()

    Handling of Permission Result (Allow or Deny) are same as activity.

    For a More Complete Example See This Answer Here