Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 741
Katakam Nikhil Avatar asked Jan 12 '17 18:01

Katakam Nikhil


People also ask

How do you ask permission runtime again if the user deny for the first time?

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.

What are Android app permissions and permissions?

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.

Why does my phone or tablet app keep asking for permission?

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.

Is it right to be cautious with app permissions?

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.

What are dangerous permissions 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.


3 Answers

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

like image 60
rafsanahmad007 Avatar answered Sep 27 '22 17:09

rafsanahmad007


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
    }
like image 22
MezzDroid Avatar answered Sep 27 '22 17:09

MezzDroid


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.

like image 34
CommonsWare Avatar answered Sep 27 '22 18:09

CommonsWare