打造简洁高效的动态权限管理器

    // TODO 权限通过

}



@Override

public void noAuthorization(int requestCode, String[] lacksPermissions) {

    // TODO 有权限没有通过

}

};




使用的时候,可以直接调用一个方法,把要请示的权限传进去就可以进行校验,像这样:



// 检查权限

mPermissionsManager.checkPermissions(“请求码”, “要校验的权限”);




于是乎,下面封装的动态权限管理器就来了:



动态权限管理器

-------



package com.kongqw.permissionslibrary;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.net.Uri;

import android.provider.Settings;

import android.support.annotation.NonNull;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import java.util.ArrayList;

/**

  • Created by kongqingwei on 2017/2/15.

  • 检查权限的类

*/

public abstract class PermissionsManager {

private static final String PACKAGE_URL_SCHEME = "package:";

private Activity mTargetActivity;



public abstract void authorized(int requestCode);



public abstract void noAuthorization(int requestCode, String[] lacksPermissions);



public PermissionsManager(Activity targetActivity) {

    mTargetActivity = targetActivity;

}



/**

 * 检查权限

 *

 * @param requestCode 请求码

 * @param permissions 准备校验的权限

 */

public void checkPermissions(int requestCode, String... permissions) {



    ArrayList<String> lacks = new ArrayList<>();

    for (String permission : permissions) {

        if (ContextCompat.checkSelfPermission(mTargetActivity.getApplicationContext(), permission) == PackageManager.PERMISSION_DENIED) {

            lacks.add(permission);

        }

    }



    if (!lacks.isEmpty()) {

        // 有权限没有授权

        String[] lacksPermissions = new String[lacks.size()];

        lacksPermissions = lacks.toArray(lacksPermissions);

        //申请CAMERA权限

        ActivityCompat.requestPermissions(mTargetActivity, lacksPermissions, requestCode);

    } else {

        // 授权

        authorized(requestCode);

    }

}



/**

 * 复查权限

 * <p>

 * 调用checkPermissions方法后,会提示用户对权限的申请做出选择,选择以后(同意或拒绝)

 * TargetActivity会回调onRequestPermissionsResult方法,

 * 在onRequestPermissionsResult回调方法里,我们调用此方法来复查权限,检查用户的选择是否通过了权限申请

 *

 * @param requestCode  请求码

 * @param permissions  权限

 * @param grantResults 授权结果

 */

public void recheckPermissions(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    for (int grantResult : grantResults) {

        if (grantResult == PackageManager.PERMISSION_DENIED) {

            // 未授权

            noAuthorization(requestCode, permissions);

            return;

        }

    }

    // 授权

    authorized(requestCode);

}



/**

 * 进入应用设置

 *

 * @param context context

 */

public static void startAppSettings(Context context) {

    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    intent.setData(Uri.parse(PACKAGE_URL_SCHEME + context.getPackageName()));

    context.startActivity(intent);

}

}




应用

--



使用起来的逻辑也比较清晰简单,一共3步:



### 1\. 初始化权限管理器



// 初始化

mPermissionsManager = new PermissionsManager(this) {

分享读者

作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括腾讯,以及字节跳动,阿里,华为,小米,等一线互联网公司主流架构技术。

腾讯T3架构师学习专题资料

如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!

我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

主要包括腾讯,以及字节跳动,阿里,华为,小米,等一线互联网公司主流架构技术。

[外链图片转存中…(img-Kqktkgol-1726033318733)]

如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!

我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值