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?
I don't think you should ask permission again if the user denies, all you can do is, don't take the app forward , just show them a toast or a dialog telling them that this permission is required for the app to work correctly and ask them to grant permission in the settings.
Android app permissions can give apps control of your phone and access to your camera, microphone, private messages, conversations, photos, and more. App permission requests pop up the first time an app needs access to sensitive hardware or data on your phone or tablet and are usually privacy-related.
These requests pop up the first time an app needs access to sensitive hardware or data on your phone or tablet. If you’ve installed a camera app, for example, it will need your permission to access the camera before it can actually take photos.
It’s right to be cautious, as they can give third-party apps intimate access to your private info. But some apps require permissions in order to function properly. Read on to learn which app permissions to avoid, which to allow, and how to get control of your personal data on Android.
It’s the “dangerous” permissions that Android requires your permission to use. These “dangerous” permissions include access to your calling history, private messages, location, camera, microphone, and more. These permissions are not inherently dangerous, but have the potential for misuse.
First Define the variable:
public static int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
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
I used this code for that very purpose.
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;
}
}
You can then call :
if(isPermissionGranted())
{
// do your stuff
}
Call requestPermissions()
to request the permissions. You find out the result in onRequestPermissionsResult()
and can determine if they granted the permission or not. That is "right after", from the standpoint of your app's code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With