另一种思路下的低耦合易封装权限请求库-PermissionRequester

先说下这个权限请求库能够做到的事情:

 1.能够直接在请求结果回调里得到哪些权限被授予,哪些权限被拒绝,本次请求的权限是否全部被授予。

 2.能够容易的在基类里进行封装,对拒绝方法进行统一的处理。

3.耦合比较小,适合从低版本sdk升级到6.0的朋友。


直接先看下使用的方法吧:

/**
 * 实现了PermissionRequestResultListener 请求结果监听器的类
 * Created by z2wenfa on 2016/10/26.
 */
public class BaseActivity extends AppCompatActivity implements PermissionRequestResultListener {

    private int tag = 1;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PermissionRequest.registerBroadCast(this, this, tag);//注册请求结果监听
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        PermissionRequest.unRegisterBroadCast(tag);//反注册请求结果的监听
    }

    /**
     *请求权限被授予时调用
     * @param requestCode 请求码
     * @param grantedPermissions   被授予的权限
     * @param getAllRequestPermissions  这次请求的权限是否全部都获得了
     */
    @Override
    public void onGetGrantedPermission(int requestCode, ArrayList<PermissionEntity> grantedPermissions, boolean getAllRequestPermissions) {
        showMsg("请求" + grantedPermissions.toString() + "权限成功。" + "请求的权限是否全部获得:" + getAllRequestPermissions);
        Log.i("test3", "权限请求成功:" + grantedPermissions.toString() + ":" + getAllRequestPermissions);
    }

    /**
     *请求权限被拒绝是调用
     * @param requestCode 请求码
     * @param deniedPermissions 被拒绝的权限
     */
    @Override
    public void onGetDeniedPermission(int requestCode, ArrayList<PermissionEntity> deniedPermissions) {
        showMsg("请求" + deniedPermissions.toString() + "权限失败,请到设置→应用管理→权限中授予权限。");
        Log.i("test3", "权限请求失败:" + deniedPermissions.toString());
    }

    /**
     *需要告诉用户为什么申请时调用
     * @param requestCode 请求码
     * @param deniedPermissions 需要告知用户的权限
     */
    @Override
    public void onShouldShowRequestPermissionRationale(int requestCode, ArrayList<PermissionEntity> deniedPermissions) {
        showMsg("程序需要获得" + deniedPermissions.toString() + "权限以正常使用功能。");
        Log.i("test3", "未获得:" + deniedPermissions.toString());
    }
}

这个是基类的代码主要就是对请求消息监听的注册反注册和对请求结果进行统一的处理。我们可以直接在基类中进行权限拒绝与通知用户为什么需要申请权限的代码编写,一般我们只需要关心成功时的回调方法。我们在获得被授予的权限同时还可以通过getAllRequestPermissions这个参数判断本次请求的权限是否全部被授予。Fragment也是类似的使用方式。

接下来在看权限的请求:

public class MainActivity extends BaseActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        PermissionRequest.requestPermissionInOnCreateMethod(this, 2015, Permissions.CAMERA, Permissions.LOCATION);//在界面还未显示前进行权限请求
    }


    private void initView() {
        button = (Button) findViewById(R.id.btn1);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PermissionRequest.requestPermission(MainActivity.this, 2015, Permissions.CONTACTS, Permissions.SMS); //界面已经显示了进行权限的请求
            }
        });
    }
权限请求一共三个参数,第一个Activity对象,第二个请求码,第三个是可变长参数请求的权限。不过需要注意的是权限请求分为了在界面加载完成前请求与加载完成后请求(新的版本可能融合成一个方法)。

个人觉得使用起来还是挺简单方便了。


Gradle的使用方法:
compile 'com.z2wenfa:PermissionRequester:1.0.0'


简单说下为什么写这个库:

  虽然已经网上已经有了很多的第三方库,但是经过实际的使用发现,有些地方使用起来不是特别方便,进行封装也比较的麻烦,于是我便想着实现一个容易封装点,耦合比较小的库。

我拿hongyang的MPermission为例说一下自己在哪些地方使用起来不是很方便吧(因为我之前使用的就是这个库):

1.没有细分请求的权限中哪些权限请求被允许,哪些被拒绝:

这个库在请求多个权限后,根据请求的的权限是否全部都获得了来判断本次请求是否成功,这就导致我不能够根据请求结果灵活的进行判断接下来执行什么操作。

举个例子:开发一个拍照app,当我请求权限时,我可能会同时请求拍照权限与定位权限,定位权限用来保存图片的地址,这时拍照权限就是必须的,而定位权限即使没有获得也不应该让app不能进行拍照吧!

如果我们在自己在请求结束后再进行一次对请求的判断的话就太麻烦了,最好的就是直接分类好结果给我。

2.处理请求结果会出现代码冗余:

MPermission使用的是通过注解与请求码来判断获得请求结果调用哪个方法,然而库只会从当前请求的类中寻找调用方法,而不会到父类中去寻找,这样的话就很麻烦了,只要

这个Activity或者Fragment请求了权限,就必须在这个类里编写请求结果执行的回调方法,然而实际情况下请求失败的提示基本上都是差不多的,我们只需要告诉用户没有获得某某权限如果想要系统正常使用就要到设置的权限管理中给予权限,每次都要再写一个方法再加上注解,感觉有点冗余了。


稍微说下封装的思路吧:

 之前我们在进行权限请求时都是通过在本Activity获得Fragment重写

onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults)


而我的想法是为何不能使用一个统一的Activity专门进行权限请求呢?于是每次进行权限请求都会跳到这个统一处理的Activity中。

有兴趣的可以看下代码:

GitHub地址:https://github.com/z2wenfa/PermissionRequester


参考博客:http://blog.csdn.net/lmj623565791/article/details/50709663


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值