定制本身的动态申请权限库

为何要定制本身的动态申请权限库

Android6.0以后,Android系统就要求敏感权限须要动态申请。这位用户带来了很大的方便,也给开发者带来了更大的挑战。官方提供了相应的API供开发者使用,可是使用起来略显麻烦。市场上也有不少开源权限申请库,以前有使用rxPermission,此次也有参考rxPermission的代码。使用开源库当然很方便,可是我以为,开源的意义在于提供一种思路,给其余同行一个借鉴,你们最好仍是要会写本身的库,哪怕搓一点也不要紧。git

动态申请权限的思路

  • 第一种:官方的写法是在当前Activity申请权限,在当前Activity回调结果。这种写法很标准,可是很繁琐,写起来很是不方便。
  • 第二种:以前看到一个同事写的库,他是跳到一个新的Activity,而后申请权限,在该Activity监听回调。这种方法达到了方便使用的效果,可是体验不是很好。我写的第一个版本就是这个方法。
  • 第三种:在当前Activity添加一个Fragment,在该Fragment中申请权限,并在该Fragment中监听返回结果。这是rxPermission的思路,我以为这是三种方法中最好的方法,最终版本也是采用的这个方法。

代码实现步骤

  • 首先,写一个入口类:SchPermission,构造函数传入activity,建立fragment添加到该activity。
  • 而后,建立一个Fragment类:SchPermissionFragment。具体的申请权限申请及申请结果回调都在该fragment中。
  • 为了防止同时屡次调用申请权限接口,致使回调错乱,每次申请权限的requestCode都不同,建立一个HashMap存储requestCode和callback,一一对应,防止回调错乱。

使用例子

SchPermission mSchPermission = new SchPermission(this);
  mSchPermission
                        .request(new String[] {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                new
                                        IPermissionCallback() {
                                            @Override
                                            public void onPermissionResult(int requestCode,
                                                                           String[] permissions,
                                                                           int[] grantResults) {
                                                // 根据权限申请结果处理业务
                                            }
                                        });

后记

写的比较简单,请你们多多指教。github

项目地址

https://github.com/shench5612390/SchPermission/tree/masteride

相关文章
相关标签/搜索