android6.0权限通用管理(不在头大)

一个类解决Android6.0权限的繁杂

 在activity中涉及到需要申请权限的功能时,比如点击按钮照相,这是主要一段代码,没什么难度就是做了一个统一回调:

  /***
         * request permission for activity's method of up 6.0
         * @param permissions
         * @param listener
         */
        public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
            if (activity == null)
                return;
            shouldRequestPermissions = new ArrayList<>();
            denied = new ArrayList<>();
            tips = new ArrayList<>();
            this.permissionListener = listener;
            if (isNeedRequestPermission()) {
                for (int i = 0; i < permissions.length; i++) {
                    if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
                        shouldRequestPermissions.add(permissions[i]);
                }
                if (shouldRequestPermissions.size() > 0) {
                    String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
                    ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
                } else {
                    if (permissionListener != null)
                        permissionListener.granted();

                }

            } else {
                if (permissionListener != null)
                    permissionListener.granted();
            }
        }

在activity中这样用,同意回调,拒绝回调,拒绝后不再提示回调(需要用户手动去设置开启),注意:如果这个功能需要多个权限,有一个用户没有通过,那么该功能不可用,大家根据自己的需求在不同的回调里做操作:

    private void permissget() {   
        builder.activity(this).requestPermissionFeature(new String[]{Manifest.permission.READ_PHONE_STATE}, new Permission.PermissionListener() {
            @Override
            public void granted() {
                initInfo();
            }
            @Override
            public void deniedNeverAsk() {
                ToastUtils.showToast(WelcomeActivity.this,getString(R.string.deniedNeverAsk));
            }
            @Override
            public void denied() {
                finish();
            }
        });
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        builder.RequestPermissionsResult(requestCode,permissions,grantResults);
    }

在fragment中差不多的用法  把上面的builder.activity(this)换成builder.fragment (this), 方法名requestPermissionForFragment,我会把全部类贴出来直接拿去用就ok了!!!

如果有什么问题还请指出。

完整类↓↓

public class Permission {

    public Permission() {
    }
    public  static class Builder {
        private List<String> shouldRequestPermissions;
        private List<Integer> denied;
        private List<Boolean> tips;
        private Activity activity;
        private Fragment fragment;
        private PermissionListener permissionListener;
        private final int PERMISSIONS_REQUEST_CODE = 42;

        public Builder() {

        }

        public Permission build() {
            return new Permission();
        }

        public Builder activity(Activity activity) {
            this.activity = activity;
            return this;
        }

        public Builder fragment(Fragment fragment) {
            this.fragment = fragment;
            return this;
        }
        /***
         * request permission for activity's method of up 6.0
         * @param permissions
         * @param listener
         */
        public void requestPermissionFeature(String[] permissions, PermissionListener listener) {
            if (activity == null)
                return;
            shouldRequestPermissions = new ArrayList<>();
            denied = new ArrayList<>();
            tips = new ArrayList<>();
            this.permissionListener = listener;
            if (isNeedRequestPermission()) {
                for (int i = 0; i < permissions.length; i++) {
                    if (ContextCompat.checkSelfPermission(activity, permissions[i]) != PackageManager.PERMISSION_GRANTED)
                        shouldRequestPermissions.add(permissions[i]);
                }
                if (shouldRequestPermissions.size() > 0) {
                    String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);
                    ActivityCompat.requestPermissions(activity, requestPermissions, PERMISSIONS_REQUEST_CODE);
                } else {
                    if (permissionListener != null)
                        permissionListener.granted();

                }

            } else {
                if (permissionListener != null)
                    permissionListener.granted();
            }
        }

        /***
         * request permission for fragment's method of up 6.0
         * @param permissions
         * @param listener
         */
        public void requestPermissionForFragment(String[] permissions, PermissionListener listener) {
            if (fragment == null)
                return;
            shouldRequestPermissions = new ArrayList<>();
            denied = new ArrayList<>();
            tips = new ArrayList<>();
            this.permissionListener = listener;
            if (isNeedRequestPermission()) {
                for (int i = 0; i < permissions.length; i++) {
                    if (ContextCompat.checkSelfPermission(fragment.getContext(), permissions[i]) != PackageManager.PERMISSION_GRANTED)
                        shouldRequestPermissions.add(permissions[i]);
                }
                if (shouldRequestPermissions.size() > 0) {
                    String[] requestPermissions = shouldRequestPermissions.toArray(new String[shouldRequestPermissions.size()]);

                    fragment.requestPermissions(requestPermissions, PERMISSIONS_REQUEST_CODE);
                } else {
                    if (permissionListener != null)
                        permissionListener.granted();
                }

            } else {
                if (permissionListener != null)
                    permissionListener.granted();
            }
        }

        /**
         * this callback of all request permission
         * @param requestCode
         * @param permissions
         * @param grantResults
         */
        public void RequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            if (requestCode != PERMISSIONS_REQUEST_CODE)
                return;
            for (int i = 0; i < permissions.length; i++) {
                boolean isTip=false;
                if (activity != null) {
                    isTip = ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i]);
                } else {
                    isTip = ActivityCompat.shouldShowRequestPermissionRationale(fragment.getActivity(), permissions[i]);
                }
                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                    denied.add(i);
                    if (!isTip)
                        tips.add(isTip);
                }
            }
            if (denied.size() > 0) {
                if (permissionListener != null) {
                    if (tips.size() > 0)
                        permissionListener.deniedNeverAsk();
                    else
                        permissionListener.denied();
                }

            } else {
                if (permissionListener != null)
                    permissionListener.granted();
            }
        }
    }

    private static boolean isNeedRequestPermission() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? true : false;
    }

    public interface PermissionListener {
        void granted();

        void denied();

        void deniedNeverAsk();
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值