安卓权限处理 PermissionDog
PermissionDog
简介
权限狗 权限申请
最近在一家公司实习,项目中需要用到适配安卓6.0以上的系统,我本来是想用其他人已经写好的权限申请框架来实现的,但是发现跟我的需求有点小区别,所以就自己写了一个
这个权限申请的帮助类很小,只有一个java文件,复制到你的项目中就可以直接使用
没想到什么好名字 既然有权限,那就叫权限狗吧
#使用截图
请求单个权限
请求多个权限
请求多个权限失败
请求多个权限是勾选了不再显示
特性
1:支持单个和多个权限的申请
2:单个支持三个回调:允许,拒绝,勾中不再显示框并拒绝
3:多个权限回调时返回允许,拒绝,勾中不再显示框并拒绝的权限列表
使用
1.在你需要申请权限的Activity中重写onRequestPermissionsResult
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { PermissionDog.getInstance().notifyPermissionsChanged(MainActivity.this, requestCode, permissions, grantResults); }
2.在你需要申请权限的地方添加以下代码
请求单个权限
private void requestSinglePermission() { PermissionDog.getInstance().SetAction(new PermissionDog.PermissionDogAction() { @Override public void never() { super.never(); //已经勾选了不再提醒 Toast.makeText(MainActivity.this, "已经拒绝权限,请前往设置开启", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, REQUEST_PERMISSION_SETTING); } @Override public void denied() { super.denied(); //未获取到权限 Toast.makeText(MainActivity.this, "未获取到了单个权限", Toast.LENGTH_SHORT).show(); } @Override public void grant() { super.grant(); //获取到了权限 Toast.makeText(MainActivity.this, "获取到了单个权限", Toast.LENGTH_SHORT).show(); } }); PermissionDog.getInstance().requestSinglePermissions(MainActivity.this, singlePermission); }
请求多个权限
private void requestMultiPermission() { PermissionDog.getInstance().SetAction(new PermissionDog.PermissionDogAction() { @Override public void allallow() { super.allallow(); //在此设置权限全部被允许后的操作 Toast.makeText(MainActivity.this, "多个权限全部被允许", Toast.LENGTH_SHORT).show(); } @Override public void multi(String[] granteds, String[] denieds, String[] nevershows) { if (nevershows.length != 0) { new AlertDialog.Builder(MainActivity.this, R.style.DialogTheme).setTitle("Permission") .setMessage("PermissionDog需要摄像头和拨打电话的权限") .setPositiveButton("前往设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, REQUEST_PERMISSION_SETTING); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //有权限被勾选了不再提醒 Toast.makeText(MainActivity.this, "有权限被勾选了不再提醒", Toast.LENGTH_SHORT).show(); } }).create().show(); } else { if (denieds.length != 0) { new AlertDialog.Builder(MainActivity.this, R.style.DialogTheme).setTitle("Permission") .setMessage("PermissionDog需要读写空间和拨打电话的权限") .setPositiveButton("获取", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { PermissionDog.getInstance().requestMultiPermissions(MainActivity.this, multiPermission); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "未获取到必要的权限", Toast.LENGTH_SHORT).show(); } }).create().show(); } else { //在此设置权限全部被允许后的操作 Toast.makeText(MainActivity.this, "多个权限全部被允许", Toast.LENGTH_SHORT).show(); } } } }); PermissionDog.getInstance().requestMultiPermissions(MainActivity.this, multiPermission); }
3.运行
##解释:
申请单个权限时重写never,denied,grant三个方法
申请多个权限时重写allallow,multi两个方法
你可以在我的github上找到你需要的PermissionDog源文件
地址:https://github.com/hei12138/PermissionDog
有任何问题可以随时联系我:1329698854@qq.com