raphaelbussa / permissionutils Goto Github PK
View Code? Open in Web Editor NEWCheck marshmallow permission easily
Home Page: https://raphaelbussa.github.io/PermissionUtils/
License: MIT License
Check marshmallow permission easily
Home Page: https://raphaelbussa.github.io/PermissionUtils/
License: MIT License
Hello
I have use your library but one scenario is suppose in fragment apply permission manager and onRequestPermissionsResult handleResult this resule but after deny permission current fragment is automatic finish if you have any solution
Fragment code is-
PermissionManager.Builder()
.permission(PermissionEnum.WRITE_EXTERNAL_STORAGE)
.askAgain(true)
.callback(new FullCallback() {
public void result(ArrayList<PermissionEnum> permissionsGranted, ArrayList<PermissionEnum> permissionsDenied, ArrayList<PermissionEnum> permissionsDeniedForever, ArrayList<PermissionEnum> permissionsAsked) {
}
})
.ask(EditProfileFragment.this);
And On Result permission handle
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionManager.handleResult(EditProfileFragment.this, requestCode, permissions, grantResults);
Thanks
JD
x.x.x
7.0
LG
Nexus 5X
Also, please wrap Java with correct syntax highlighting.
System.out.println("Hello, world!");
2.0.6
6.0
Alcatel
Cocoa Gray B
I just copied the example code for showing dialog, but the dialog is not shown
PermissionManager.Builder()
.permission(permissions)
.askAgain(true)
.askAgainCallback(new AskAgainCallback() {
@Override
public void showRequestPermission(AskAgainCallback.UserResponse response) {
showDialog(response);
}
})
.callback(new FullCallback() {
@Override
public void result(ArrayList<PermissionEnum> permissionsGranted, ArrayList<PermissionEnum> permissionsDenied, ArrayList<PermissionEnum> permissionsDeniedForever, ArrayList<PermissionEnum> permissionsAsked) {
}
})
.ask(this);
This is the showDialog function:
new AlertDialog.Builder(this)
.setTitle("Permission needed")
.setMessage("This app really need to use this permission, you wont to authorize it?")
.setPositiveButton("OK", (dialogInterface, i) -> response.result(true))
.setNegativeButton("NOT NOW", (dialogInterface, i) -> response.result(false))
.show();
The dialog is shown.
Nothing happens.
Where should i write my own code ,if Permission Accepted and where should i display my else result which is nothing but Asking again Permissions .Explanation would be helpful @Rebus007 .It was awesome !!
currently the util just support using context, hence if using Fragment.getContext() as the parameter to init the permission util we still have to put PermissionManager.handleResult(requestCode, permissions, grantResults);
in the activity's onRequestPermissionsResult()
Hi, great library i just want to reminds you to update support libraries to 26.0.2 (the latest until now :))
Hi,
Thanks for a very neat library!
My application needs plenty permissions. These are found in Manifest.permission.*, but they are not in this library's PermissionsEnum.
I declare my Permission List as such:
public static ArrayList<PermissionEnum> permissionList = new ArrayList<PermissionEnum>() {
{
add(PermissionEnum.ACCESS_COARSE_LOCATION);
add(PermissionEnum.ACCESS_FINE_LOCATION);
add(PermissionEnum.ACCESS_WIFI_STATE); //not in enum list
add(PermissionEnum.ACCESS_NETWORK_STATE); //not in enum list
add(PermissionEnum.BLUETOOTH); //not in enum list
add(PermissionEnum.BLUETOOTH_ADMIN); //not in enum list
add(PermissionEnum.CAMERA);
add(PermissionEnum.CHANGE_WIFI_STATE); //not in enum list
add(PermissionEnum.FLASHLIGHT); //not in enum list
add(PermissionEnum.INTERNET); //not in enum list
add(PermissionEnum.READ_LOGS); //not in enum list
add(PermissionEnum.READ_OWNER_DATA); //not in enum list
add(PermissionEnum.READ_PHONE_STATE);
add(PermissionEnum.RECORD_AUDIO);
add(PermissionEnum.RECEIVE_SMS);
add(PermissionEnum.READ_EXTERNAL_STORAGE);
add(PermissionEnum.USB_PERMISSION); //not in enum list
add(PermissionEnum.VIBRATE); //not in enum list
add(PermissionEnum.WRITE_EXTERNAL_STORAGE);
add(PermissionEnum.WRITE_OWNER_DATA); //not in enum list
add(PermissionEnum.WRITE_SETTINGS); //not in enum list
add(PermissionEnum.WAKE_LOCK); //not in enum list
}
};
Is there a work around to include these which are not in enum list?
Regards,
Willem
Hello, i use your lib in my project in fragment and i add permission check in util class
public static boolean checkVoicePermission(final Fragment fragment, final PermissionEnum permissionEnum) {
final boolean[] hasPermission = {false};
PermissionManager.Builder()
.permission(permissionEnum)
.askAgain(true)
.askAgainCallback(new AskAgainCallback() {
@Override
public void showRequestPermission(UserResponse response) {
}
})
.callback(new FullCallback() {
@Override
public void result(ArrayList<PermissionEnum> permissionsGranted, ArrayList<PermissionEnum> permissionsDenied, ArrayList<PermissionEnum> permissionsDeniedForever, ArrayList<PermissionEnum> permissionsAsked) {
if (permissionsDeniedForever.contains(permissionEnum)) {
Snackbar snackbar = Snackbar
.make(fragment.getActivity().findViewById(android.R.id.content)
.findViewById(android.R.id.content), fragment.getActivity().getResources().getString(R.string.permission_content), Snackbar.LENGTH_LONG)
.setAction(fragment.getActivity().getResources().getString(R.string.global_settings), new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", fragment.getActivity().getPackageName(), null);
intent.setData(uri);
fragment.getActivity().startActivity(intent);
}
});
snackbar.show();
}
if (permissionsGranted.contains(permissionEnum)) {
hasPermission[0] = true;
}
}
})
.ask(fragment);
return hasPermission[0];
}
but when shoose permissionsDeniedForever i have this erreur
Can reqeust only one set of permissions at a time
sorry,This will use the exception in the Fragment.....
3.0.1
7.0
Samsung
A5
Also, please wrap Java with correct syntax highlighting.
PermissionManager.Builder()
.key(Constants.REQUEST_PERMISSION_LOCATION)
.permission(PermissionEnum.GROUP_LOCATION)
.askAgain(true)
.callback { permissionsGranted ->
//permissionsGranted is false here
}
.ask(this)
System.out.println("Hello, world!");
permissionsGranted should give true
permissionsGranted gives false
PermissionUtils.isGranted(this, PermissionEnum.GROUP_LOCATION) gives true
Below is what my FullCallback implementation looks like.
new FullCallback() {@
Override
public void result(ArrayList < PermissionEnum > permissionsGranted,
ArrayList < PermissionEnum > permissionsDenied,
ArrayList < PermissionEnum > permissionsDeniedForever,
ArrayList < PermissionEnum > permissionsAsked) {
Log.d("DEBUG", "call back"); // Not printed if I deny, or deny forever.
for (PermissionEnum permissionEnum: permissionsGranted) {
if (permissionEnum.equals(PermissionEnum.CAMERA)) {
Log.d("DEBUG", "granted!");
}
}
for (PermissionEnum permissionEnum: permissionsDenied) {
if (permissionEnum.equals(PermissionEnum.CAMERA)) {
Log.d("DEBUG", "denied!");
}
}
for (PermissionEnum permissionEnum: permissionsDeniedForever) {
if (permissionEnum.equals(PermissionEnum.CAMERA)) {
Log.d("DEBUG", "denied for ever!");
}
}
for (PermissionEnum permissionEnum: permissionsAsked) {
if (permissionEnum.equals(PermissionEnum.CAMERA)) {
Log.d("DEBUG", "asked!");
}
}
}
}
1.0.9
7.0
Samsung
S7 Edge
Also, please wrap Java with correct syntax highlighting.
PermissionManager.with(HomeActivity.this)
.key(RC_CAMERA)
.permission(PermissionEnum.CAMERA)
.askAgain(true)
.askAgainCallback(new AskAgainCallback() {
@Override
public void showRequestPermission(UserResponse response) {
}
})
.callback(new FullCallback() {
@Override
public void result(ArrayList<PermissionEnum> permissionsGranted, ArrayList<PermissionEnum> permissionsDenied,
ArrayList<PermissionEnum> permissionsDeniedForever, ArrayList<PermissionEnum> permissionsAsked) {
if (!permissionsGranted.isEmpty() && permissionsGranted.contains(PermissionEnum.CAMERA)) {
startPublishWirecastPage();
} else if (!permissionsDeniedForever.isEmpty()
|| permissionsDeniedForever.contains(PermissionEnum.CAMERA)
) {
}
}
})
.ask();
Should not leak
Leakcanary shows a leak in PermissionManager instance
1.0.9
6.0
ASUS
Nexus 7 2013
I've implemented your library like that in my MainActivity
private void showDialog(final AskAgainCallback.UserResponse response, String title, String msg) {
new AlertDialog.Builder(this)
.setTitle(getResources().getString(R.string.dialog_title_warning))
.setMessage(getResources().getString(R.string.perm_location_explain) +
getResources().getString(R.string.perm_storage_explain) +
getResources().getString(R.string.perm_calendar_explain)
)
.setPositiveButton(getResources().getString(R.string.label_positiveBtnContinue), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
response.result(true);
}
})
.setNegativeButton(getResources().getString(R.string.label_negativeBtnCancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
response.result(false);
}
})
.setCancelable(false)
.show();
}
@Override
public void result(ArrayList<PermissionEnum> permissionsGranted, ArrayList<PermissionEnum> permissionsDenied, ArrayList<PermissionEnum> permissionsDeniedForever, ArrayList<PermissionEnum> permissionsAsked) {
List<String> msg = new ArrayList<>();
int neededPermissions = 0;
for (PermissionEnum permissionEnum : permissionsGranted) {
if (PermissionEnum.ACCESS_FINE_LOCATION.equals(permissionEnum)) {
neededPermissions++;
} else if (PermissionEnum.WRITE_EXTERNAL_STORAGE.equals(permissionEnum)) {
neededPermissions++;
}
}
if (neededPermissions >= 2) { // I really need these 2 permissions
startApp();
} else {
msg.add(getResources().getString(R.string.perm_all_refused) + getResources().getString(R.string.perm_go_settings));
}
for (PermissionEnum permissionEnum : permissionsDenied) {
if (PermissionEnum.ACCESS_FINE_LOCATION.equals(permissionEnum)) {
msg.add(getResources().getString(R.string.perm_location_explain));
} else if (PermissionEnum.WRITE_EXTERNAL_STORAGE.equals(permissionEnum)) {
msg.add(getResources().getString(R.string.perm_storage_explain));
} else if (PermissionEnum.WRITE_CALENDAR.equals(permissionEnum)) {
msg.add(getResources().getString(R.string.perm_calendar_explain));
}
}
if (permissionsDeniedForever.size() > 0) {
msg.add(getResources().getString(R.string.perm_go_settings));
}
if (msg.size() > 0) {
String[] items = msg.toArray(new String[msg.size()]);
new AlertDialog.Builder(this)
.setTitle(getResources().getString(R.string.label_DlgTitleInfo))
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
PermissionManager.handleResult(requestCode, permissions, grantResults);
}
If I click on open from the PlayStore, it doesn't ask me any permission and directly displays the msg generated by the else
in the following code:
if (neededPermissions >= 2) {
startApp();
} else {
msg.add(getResources().getString(R.string.perm_all_refused) + getResources().getString(R.string.perm_go_settings));
}
If I quit and kill the app and restart it, it asks me for the permissions as expected.
I don't see how your result()
callback can be directly called.
Any idea?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.