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?
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