Permission Reuquester is a simple permission request activity that let you grant easylly, with a standard policy, that covers all of situations relative.


Requesting permissions at run time is a new feature added from 6.0 (API level ), grant permissions to apps while the is running, not when they install the . An target at 23 or above, need to requesting the “Dangerous” permission at run .

There is lot of things to do.

You need to Check For Permissions to see if the permissions are granted. If not, you need to Request the permissions you need, and you may need to Explain why the app needs permissions. Somethings you also need to Handle the permissions request response to do things after permission granted. What’s more, if user selected “Don’t ask again”, you will not have a chance to requesting permissions from App, then you may need to guide user to settings to open the permissions.


Here is a workflow for permission request policy:

-  - The Android Arsenal – Permissions

When you start requesting permission with PermissionRequestActivity, it will first check if we already have permission. If don’t, show system permission requesting dialogs to ask for permissions. Then show a “rationale dialog” for user if he denied the permissions, or show a “go settings dialog” to guide user to settings when he click “Don’t ask again”.



dependencies {
    compile 'me.tankery.lib:permission-requester:1.0.0'

Gradle 3.0

dependencies {
    implementation 'me.tankery.lib:permission-requester:1.0.0'


If you don’t need response when requesting finished, all you need to do is to start the PermissionRequestActivity using:

PermissionRequestActivity.start(context, PERMISSIONS, rationalMsg, goSettingsMsg);

You can even start this activity from background Service.

If you care about the requesting response, start PermissionRequestActivity from your activity:

PermissionRequestActivity.start(activity, REQUEST_CODE, PERMISSIONS, rationalMsg, goSettingsMsg);

Then, handle the activity result in onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent ) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Permission granted
        } else {
            // Permission denied

You can also override showRationaleDialog to show a custom rationale dialog when need:

 * Override this method to show custom dialog.
 * @param canRequestAgain if true, show request again dialog, else, show go settings dialog
 * @param message dialog message
 * @param dialogResult always have a result for user action
 *                     (ok - > positive/cancel -> negative/dismiss -> negative)
protected void showRationaleDialog(final boolean canRequestAgain, String message,
                                   final @NonNull DialogResult dialogResult) {
    AlertDialog alertDialog = new AlertDialog.Builder(this)
            .setPositiveButton(android.R.string.ok, new OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
            .setNegativeButton(android.R.string.cancel, new OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
            .setOnCancelListener(new OnCancelListener() {
                public void onCancel(DialogInterface dialogInterface) {


Feel free to create issues when you find some bug or have some suggestions. And Pull Request is welcome. Thanks for your attention~

Source link


Please enter your comment!
Please enter your name here