Android运行时请求权限封装

本文介绍了如何封装一个Android权限请求模块,通过透明Activity处理权限申请过程,提高代码可读性和维护性。详细讲解了测试用例设计、实现方法,包括在onRequestPermissionsResult中的权限检查和用户拒绝后的处理,以及如何在resume时重新判断权限。
摘要由CSDN通过智能技术生成

Android运行时请求权限封装

本文目的:“借助透明Activity封装一个易于调用的权限请求模块”

1 介绍

Android权限的校验和申请比较简单,但在实际项目中使用时还要进行系统版本的适配,最不友好的是权限的申请结果需要在 onRequestPermissionsResult 中进行判断,如果项目中有多个地方需要申请权限,或者申请权限的代码在自定义的组件中,而申请结果判断则在activity或fragment中,那代码就会显得很乱,对于后期维护也是很不方便,因此我们就来封装一个简单的权限申请模块。

2 测试用例设计

首页我们还是先设计一个权限申请的测试用例步骤:
1、首先判断所需要的权限是否已经过用户授权;
2、如果没有经过用户授权,则申请权限;
3、如果用户授权,则调用相关功能;
4、如果用户拒绝授权,则提示信息。
解析流程:
输入:需要的权限
输出:授权/拒绝

测试用例的代码实现:

String[] permisstions = new String[];  //申请所需要权限
PermissionHelper.request(context,permisstions,new Listener(){
   
	void granted(){
   
		//授权后执行
	}
	void denied(){
   
		//拒绝后执行
	}
});

测试用例实现了输入、输出,其他步骤就需要在模块中实现,对调用方透明。

3 实现

首先我们先实现PermissionHelper类,功能是判断权限是否被授权,如果没有被授权则申请权限。


/**
 * 权限帮助类
 * Created by lidong on 2019/10/25.
 */
public class PermissionHelper {
   

    /**
     * 请求权限
     *
     * @param context     context
     * @param permissions 权限
     * @param listener    监听
     */
    public static void request(Context context, String[] permissions, PermissionListener listener) {
   
        //判断权限,如果所有权限全被授权,直接返回
        if (checkPermission(context, permissions)) {
   
            if (listener != null) {
   
                listener.granted();
            }
            return;
        }

        //申请权限
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
     //6.0以下没有申请权限,直接返回拒绝
            if (listener != null) {
   
                listener.denied();
            }
        } else {
     //6.0及以上申请权限
            //为了统一回调需要借用一个activity
            PermissionActivity.open(context, permissions, listener);
        }
    }

    /**
     * 校验权限
     *
     * @param context     context
     * @param permissions 权限
     * @return 所有权限已被授权返回true,否则返回false
     */
    protected static boolean checkPermission(Context context, String[] permissions) {
   
        for (String per : permissions) {
   
            int result = PermissionChecker.checkSelfPermission(context, per);
            if (result != PermissionChecker.PERMISSION_GRANTED) {
   
                return false;
            }
        }
        return true;
    }

    /**
     * 权限监听
     */
    public interface PermissionListener {
   
        /**
         * 所有权限已被授权
         */
        void granted();

        /**
         * 一个或多个权限被拒绝
         */
        void denied(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值