Permission-Util is a utility that simplifies Android runtime permission management.
- It can request permissions in a single method and triggers the given callback when permission status is ready.
- It splits all requested permissions as grantedPermissions and deniedPermissions, so you can easily check which permission granted or which one denied by the user.
- It returns sum result so you don't need to check all permissions separately. If all permissions are granted by the user, Permission-util let you keep your application's logic simpler, so you don't need to manage your permissions-sensitive code inside the
onRequestPermissionsResult.
In order to use the library, there are 3 different options:
1. Gradle dependency
- Add this to your app
build.gradle:
dependencies {
implementation 'com.birfincankafein:permission-util:1.0.2'
}2. Maven
- Add the following to the
<dependencies>section of yourpom.xml:
<dependency>
<groupId>com.birfincankafein</groupId>
<artifactId>permission-util</artifactId>
<version>1.0.2</version>
</dependency>3. Ivy
- Add the following to the
<dependencies>section of yourivy.xml:
<dependency org='com.birfincankafein' name='permission-util' rev='1.0.2'> <artifact name='permission-util' ext='pom' /> </dependency>Before starting, you should override the onRequestedPermissionsResult callback from Activity or Fragment in each of your Activities from which you make permissions requests, trigger the PermissionUtil.onRequestPermissionsResult. Single line code, easy.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
PermissionUtil.onRequestPermissionsResult(requestCode, permissions, grantResults);
}You can request permissions from Activity or Fragment using requestPermission for single permission, requestPermissions for multiple permissions.
- Requesting single permission from Activity:
PermissionUtil.requestPermission(activityInstance, Manifest.permission.ACCESS_NETWORK_STATE, new PermissionUtil.onPermissionResultListener() {
@Override
public void onPermissionResult(boolean isSuccess, int requestCode, ArrayList<String> grantedPermissions, ArrayList<String> deniedPermissions) {
// checking permission granted from isSuccess
if(isSuccess){
// permission granted
someFunction();
}
else {
// permission denied. Toast that this permission is required.
Toast.makeText(activityInstance, "This permission is required for this operation", Toast.SHORT).show();
}
}
});- Requesting multiple permissions from Activity:
PermissionUtil.requestPermissions(activityInstance, new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.READ_CONTACTS}, new PermissionUtil.onPermissionResultListener() {
@Override
public void onPermissionResult(boolean isSuccess, int requestCode, ArrayList<String> grantedPermissions, ArrayList<String> deniedPermissions) {
// checking all permissions granted from isSuccess
if(isSuccess){
// permission granted
someFunction();
}
else {
// permissions denied. Toast that this permission is required.
if(deniedPermissions.contains(Manifest.permission.READ_CONTACTS)){
Toast.makeText(activityInstance, "Read Contact permission is required for this operation", Toast.SHORT).show();
}
else if(deniedPermissions.contains(Manifest.permission.READ_CALENDAR)){
Toast.makeText(activityInstance, "Read Calendar permission is required for this operation", Toast.SHORT).show();
}
}
}
});- Requesting single permission from Fragment:
PermissionUtil.requestPermission(fragmentInstance, Manifest.permission.ACCESS_NETWORK_STATE, new PermissionUtil.onPermissionResultListener() {
@Override
public void onPermissionResult(boolean isSuccess, int requestCode, ArrayList<String> grantedPermissions, ArrayList<String> deniedPermissions) {
// checking permission granted from isSuccess
if(isSuccess){
// permission granted
someFunction();
}
else {
// permission denied. Toast that this permission is required.
Toast.makeText(fragmentInstance.getActivity(), "This permission is required for this operation", Toast.SHORT).show();
}
}
});- Requesting multiple permissions from Fragment:
PermissionUtil.requestPermissions(fragmentInstance, new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.READ_CONTACTS}, new PermissionUtil.onPermissionResultListener() {
@Override
public void onPermissionResult(boolean isSuccess, int requestCode, ArrayList<String> grantedPermissions, ArrayList<String> deniedPermissions) {
// checking all permissions granted from isSuccess
if(isSuccess){
// permission granted
someFunction();
}
else {
// permissions denied. Toast that this permission is required.
if(deniedPermissions.contains(Manifest.permission.READ_CONTACTS)){ Toast.makeText(fragmentInstance.getActivity(), "Read Contact permission is required for this operation", Toast.SHORT).show(); } else if(deniedPermissions.contains(Manifest.permission.READ_CALENDAR)){
Toast.makeText(fragmentInstance.getActivity(), "Read Calendar permission is required for this operation", Toast.SHORT).show();
}
}
}
});That's it. Now you can remove untraceable logic and result handling.
You can find the demo application at app directory. Demo app includes requesting from Activity, and Fragment samples.