Skip to content

Instantly share code, notes, and snippets.

@PenzK
Created December 15, 2015 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PenzK/c8dd2a0aec9805e41686 to your computer and use it in GitHub Desktop.
Save PenzK/c8dd2a0aec9805e41686 to your computer and use it in GitHub Desktop.
Base method for handling M permissions
/**
* Handle M permission
* @param permission - permission name
* @param requestCode - permission's request code to handle in onRequestPermissionsResult
*/
protected void handlePermissions(String permission, final int requestCode) {
int statePermissionCheck = ContextCompat.checkSelfPermission(this, permission);
if (PackageManager.PERMISSION_GRANTED == statePermissionCheck) {
onPermissionGranted(permission);
} else {
final String[] permissions = {permission};
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
onPermissionRationale(permissions, requestCode);
} else {
requestPermission(permissions, requestCode);
}
}
}
protected void onPermissionRationale(String[] permission, int requestCode) {
}
protected void onPermissionGranted(String permission) {
}
protected void requestPermission(String[] permissions, int requestCode) {
ActivityCompat.requestPermissions(this, permissions, requestCode);
}
/**
* Default method for handling result of permissions request
*/
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[],
int[] grantResults) {
switch (requestCode) {
case REQUEST_READ_PHONE_STATE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// do smth
}
break;
}
}
@Override
protected void onPermissionGranted(String permission) {
switch (permission) {
case Manifest.permission.READ_PHONE_STATE:
// do smth if permission is granted
break;
}
}
@Override
public void onPermissionRationale(final String[] permissions, final int requestCode) {
switch (requestCode) {
case REQUEST_READ_PHONE_STATE:
// implement your logic of request rationale , for example:
showSnackbar(getString(R.string.label_autodetect_phone),
getString(R.string.label_allow),
new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermission(permissions, requestCode);
}
}, Snackbar.LENGTH_INDEFINITE);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment