52.自己动手封装Android6.0运行时权限相关代码

来源:互联网 发布:叉叉助手最新源码 编辑:程序博客网 时间:2024/05/01 20:41

转载请注明出处 http://blog.csdn.net/qq_31715429/article/details/52786614
本文出自:猴菇先生的博客

在app中用到动态判断运行时权限的地方还是蛮多的,比如读写SD卡、获取电话信息、拍照、定位啥的,每次的重复代码也蛮多的。看了郭霖大神CSDN公开课直播Android6.0运行时权限,讲了如何封装,下面是改过之后的代码:

1、在BaseActivity中:

//6.0以上系统判断权限  --> start    private static final int RUNTIME_PERMISSION_REQUEST_CODE = 1;    private RuntimePermissionListener mRuntimePermissionListener;    /**     * 检查运行时权限     *     * @param permissions               所检查的权限数组     * @param runtimePermissionListener 运行时权限监听器     */    public void checkRuntimePermission(String[] permissions, RuntimePermissionListener runtimePermissionListener) {        mRuntimePermissionListener = runtimePermissionListener;        List<String> deniedPermissionList = new ArrayList<>();        for (String permission : permissions) {            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {//判断权限是否允许                deniedPermissionList.add(permission);            }        }        if (deniedPermissionList.isEmpty()) {            //权限全部允许            mRuntimePermissionListener.onRuntimePermissionGranted();        } else {            String[] deniedPermissionArray = deniedPermissionList.toArray(new String[deniedPermissionList.size()]);            //请求未允许的权限            ActivityCompat.requestPermissions(this, deniedPermissionArray, RUNTIME_PERMISSION_REQUEST_CODE);        }    }    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        switch (requestCode) {            case RUNTIME_PERMISSION_REQUEST_CODE:                if (grantResults.length > 0) {                    List<String> deniedPermissionList = new ArrayList<>();                    for (int i = 0; i < grantResults.length; i++) {                        if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {                            deniedPermissionList.add(permissions[i]);                        }                    }                    if (deniedPermissionList.isEmpty()) { //权限全部允许                        mRuntimePermissionListener.onRuntimePermissionGranted();                    } else {//有拒绝的权限                        mRuntimePermissionListener.onRuntimePermissionDenied();                    }                }        }    }    /**     * 运行时权限监听器     */    public interface RuntimePermissionListener {        /**         * 允许所请求的全部权限         */        void onRuntimePermissionGranted();        /**         * 拒绝所请求的部分或全部权限         */        void onRuntimePermissionDenied();    }//6.0以上系统判断权限  --> end

2、在需要检查权限的activity中使用:

    /**     * 请求权限     */    private void checkRuntimePermission() {        String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE                , Manifest.permission.CALL_PHONE                , Manifest.permission.ACCESS_COARSE_LOCATION};        checkRuntimePermission(permissions, new RuntimePermissionListener() {            @Override            public void onRuntimePermissionGranted() {                //do something            }            @Override            public void onRuntimePermissionDenied() {                ToastUtil.show(MAinActivity.this, "拒绝该权限将无法使用部分功能");            }        });    }

3、如果在fragment中怎么用呢,那就在BaseFragment中:

/**     * 检查运行时权限     *     * @param permissions               所检查的权限数组     * @param runtimePermissionListener 运行时权限监听器     */    public void checkRuntimePermission(String[] permissions, RuntimePermissionListener runtimePermissionListener) {        Activity activity = getActivity();        if (activity instanceof BaseActivity) {            ((BaseActivity) activity).checkRuntimePermission(permissions, runtimePermissionListener);        }    }

使用方法和在activity中一样~

附上郭神视频录播地址:http://edu.csdn.net/course/detail/3539

0 0