Hari Ram
Hari Ram

Reputation: 3208

How to get all granted permissions of a app

I want to get all granted permissions. I know I can get all requested permissions by packageinfo.requestedPermissions but I want to know list of granted permissions and granted permissions can be lesser then requested in case of android M. So I just wanted to know that is there way that I can get list of all granted permissions?

I know from list of requested permission I can check for that permission weather granted or not but I want to know list of all granted permission. Don't want to check for every requested permission.

Upvotes: 14

Views: 13685

Answers (3)

Upendra Shah
Upendra Shah

Reputation: 2301

I am also needed to know which permissions are granted by user and which are not for particular package. So below the function I have used to get that permission list.

Java

private Map<String, List<String>> getAppPermissionsList(String packageName) {
    List<String> granted = new ArrayList<>();
    List<String> denied = new ArrayList<>();
    try {
        PackageInfo pi = getPackageManager().getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS);
        for (int i = 0; i < pi.requestedPermissions.length; i++) {
            if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
                granted.add(pi.requestedPermissions[i]);
            }else {
                denied.add(pi.requestedPermissions[i]);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    Map<String, List<String>> map = new HashMap<>();
    map.put("granted", granted);
    map.put("denied", denied);
    return map;
}

Kotlin

private fun getAppPermissionsList(appPackage: String): Map<String, List<String>>? {
    val granted: MutableList<String> = ArrayList()
    val denied: MutableList<String> = ArrayList()
    try {
        val pi = packageManager.getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS)
        for (i in pi.requestedPermissions.indices) {
            if (pi.requestedPermissionsFlags[i] and PackageInfo.REQUESTED_PERMISSION_GRANTED != 0) {
                granted.add(pi.requestedPermissions[i])
            } else {
                denied.add(pi.requestedPermissions[i])
            }
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    val map: MutableMap<String, List<String>> = HashMap()
    map["granted"] = granted
    map["denied"] = denied
    return map
}

Upvotes: 0

Michael
Michael

Reputation: 58507

A simple function that returns all the permissions that have been requested and granted for a given package could look like this:

List<String> getGrantedPermissions(final String appPackage) {
    List<String> granted = new ArrayList<String>();
    try {
        PackageInfo pi = getPackageManager().getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS);
        for (int i = 0; i < pi.requestedPermissions.length; i++) {
            if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
                granted.add(pi.requestedPermissions[i]);
            }
        }
    } catch (Exception e) {
    }
    return granted;
}

Note that this requires API level 16 or above, but that should hopefully not be an issue these days.

Upvotes: 36

Rahil Ali
Rahil Ali

Reputation: 965

You can check permission one by one and add to list:

// Should we show an explanation?

        List<String> listPermissionsNeeded = new ArrayList<>();
        // No explanation needed, we can request the permission.
        if((ContextCompat.checkSelfPermission(context,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED))
        {
            listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if((ContextCompat.checkSelfPermission(context,
                Manifest.permission.GET_ACCOUNTS)
                != PackageManager.PERMISSION_GRANTED))
        {
            listPermissionsNeeded.add(Manifest.permission.GET_ACCOUNTS);
        }
        if((ContextCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED))
        {
            listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION);
        }
        if((ContextCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED))
        {
            listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
        }
        if((ContextCompat.checkSelfPermission(context,
                Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED))
        {
            listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
        }
        if (!listPermissionsNeeded.isEmpty()) {
            ActivityCompat.requestPermissions(context,
                    listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),
                    MY_PERMISSIONS_REQUEST_MULTIPLE_PERMISSION);
        }

Upvotes: -3

Related Questions