Skip to content

dec04/PermissionUtilsLibrary

Repository files navigation

Android permission utils

Simple class for give multiple permissions on android device, with simple explorations.


How to:

Gradle

Step 1. Add the JitPack repository to your build file

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Step 2. Add the dependency

dependencies {
    implementation 'com.github.dec04:PermissionUtilsLibrary:1.0.1'
}

Basic usage:

In order for each permission to show its explanation, you need to add lines in the strings.xml file Required format for string resource names is PERMISSION_NAME + _EXPLANATION

For example if you request this permissions (ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, WRITE_EXTERNAL_STORAGE) names must be:

<string name="ACCESS_FINE_LOCATION_EXPLANATION">Some explanation</string>
<string name="ACCESS_COARSE_LOCATION_EXPLANATION">Some explanation</string>
<string name="WRITE_EXTERNAL_STORAGE_EXPLANATION">Some explanation</string>

Code from my google map example:

Context applicationContext;
PermissionUtils permissionUtils;
String[] permissions = {
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_COARSE_LOCATION,
    Manifest.permission.WRITE_EXTERNAL_STORAGE
};

Usually in a method OnCreate:

applicationContext = GoogleMapActivity.this;
permissionUtils = new PermissionUtils(applicationContext);

Check permissions:

// ... some code ...

// Check all permissions
if (permissionUtils.check(permissions)) {
    // if permissions already taken
    // do something
} else {
    // request permission
    permissionUtils.requestPermission(permissions);
}

If permission not taken, app request it from user. All at once.

Permission request Permission request

Usualy in OnResume or OnResumeFragment method:

if (permissionUtils.flagPermissionDenied) {
    // Permission was not granted, display "permission rejected" dialog.
    permissionUtils.showMissingPermissionError(permissions);
    permissionUtils.flagPermissionDenied = false;
}

Now, if user reject permission app show window, explaining that the permit is not received.

Permission request

The next time you request permissions, a window will be displayed explaining why you need each permission individually. In the last window, you can re-request permission.

Permission requestPermission requestPermission request

You also need implement method onRequestPermissionsResult

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode != PERMISSION_REQUEST_CODE) {
        return;
    }

    if (permissions.length != 0) {
        if (!permissionUtils.check(permissions)) {
            // Display the missing permission error dialog when the fragments resume.
            permissionUtils.flagPermissionDenied = true;
        } else {
            // For example enable the "my location layer" if the permission has been granted.
        }
    }
}

That's all. Happy hacking. 💟

p.s.

IF YOU NEED EXAMPLES;