安卓动态权限申请工具类

依赖:
// https://github.com/yanzhenjie/AndPermission
api 'com.yanzhenjie:permission:2.0.0-rc12'

工具类:

/**
 * 权限工具类
 */
public abstract class PermissionUtils {

    public void checkPerm(final String permission) {

//        requestPermission(permission);
        AndPermission.with(BaseApplication.getCurrentActivity())
                .runtime()
                .permission(permission)
                .onGranted(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> data) {
                        if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), data.get(0)) == PackageManager.PERMISSION_GRANTED) {
                            onGrant();
                            return;
                        }
                        if (AndPermission.hasAlwaysDeniedPermission(BaseApplication.getCurrentActivity(), data)) {
                            final List<String> strings = Permission.transformText(BaseApplication.getCurrentActivity(), data);
                            new AlertDialog.Builder(BaseApplication.getCurrentActivity())
                                    .setCancelable(false)
                                    .setTitle("警告")
                                    .setMessage("我们需要" + strings.get(0) + "权限,请您手动授权,否则功能无法正常使用!")
                                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            AndPermission.with(BaseApplication.getCurrentActivity())
                                                    .runtime()
                                                    .setting()
                                                    .onComeback(new Setting.Action() {
                                                        @Override
                                                        public void onAction() {
                                                            if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), strings.get(0)) == PackageManager.PERMISSION_GRANTED) {
                                                                onGrant();
                                                                return;
                                                            }else {
                                                                onDenied();
                                                            }
                                                        }
                                                    }).start();
                                        }
                                    })
                                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            onDenied();
                                        }
                                    })
                                    .show();
                        }
                    }
                })
                .onDenied(new Action<List<String>>() {
                    @Override
                    public void onAction(final List<String> data) {
                        if (ActivityCompat.checkSelfPermission(BaseApplication.getCurrentActivity(), data.get(0)) == PackageManager.PERMISSION_GRANTED) {
                            onGrant();
                            return;
                        }
                        if (AndPermission.hasAlwaysDeniedPermission(BaseApplication.getCurrentActivity(), data)) {
                            final List<String> strings = Permission.transformText(BaseApplication.getCurrentActivity(), data);
                            new AlertDialog.Builder(BaseApplication.getCurrentActivity())
                                    .setCancelable(false)
                                    .setTitle("警告")
                                    .setMessage("我们需要" + strings.get(0) + "权限,请您手动授权,否则功能无法正常使用!")
                                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            AndPermission.with(BaseApplication.getCurrentActivity())
                                                    .runtime()
                                                    .setting()
                                                    .onComeback(new Setting.Action() {
                                                        @Override
                                                        public void onAction() {
                                                            if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), strings.get(0)) == PackageManager.PERMISSION_GRANTED) {
                                                                onGrant();
                                                                return;
                                                            }else {
                                                                onDenied();
                                                            }
                                                        }
                                                    }).start();
                                        }
                                    })
                                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            onDenied();
                                        }
                                    })
                                    .show();
                        }
                    }
                }).start();
    }

    /**
     * Request permissions.
     */
    public void requestPermission(String... permissions) {
        AndPermission.with(BaseApplication.getCurrentActivity())
                .runtime()
                .permission(permissions)
                .rationale(new RuntimeRationale())
                .onGranted(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> permissions) {
                        onGrant();
                    }
                })
                .onDenied(new Action<List<String>>() {
                    @Override
                    public void onAction(@NonNull List<String> permissions) {
                        if (AndPermission.hasAlwaysDeniedPermission(BaseApplication.getCurrentActivity(), permissions)) {
                            showSettingDialog(BaseApplication.getCurrentActivity(), permissions);
                        }else {
                            onDenied();
                        }
                    }
                })
                .start();
    }

    /**
     * Display setting dialog.
     */
    public void showSettingDialog(Context context, final List<String> permissions) {
        final List<String> permissionNames = Permission.transformText(context, permissions);

        new AlertDialog.Builder(context)
                .setCancelable(false)
                .setTitle("警告")
                .setMessage("请在设置里给我们这些权限:" + permissionNames.get(0))
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        setPermission(permissionNames.get(0));
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        onDenied();
                    }
                })
                .show();
    }

    /**
     * Set permissions.
     */
    private void setPermission(final String permission) {
        AndPermission.with(BaseApplication.getCurrentActivity())
                .runtime()
                .setting()
                .onComeback(new Setting.Action() {
                    @Override
                    public void onAction() {
                        if (PermissionChecker.checkSelfPermission(BaseApplication.getCurrentActivity(), permission) == PackageManager.PERMISSION_GRANTED) {
                            onGrant();
                        }else {
                            onDenied();
                        }
                    }
                })
                .start();
    }

    public abstract void onGrant();

    /**
     * 没有权限
     */
    public abstract void onDenied();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨Army

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值