android架构师之路——AOP应用(android 6.0权限申请)

本文通过AOP实践在Android 6.0权限申请中的应用,介绍了如何使用注解简化权限管理。文章包含项目结构、代码解析,并提供了相关学习资源链接和Demo下载地址。
摘要由CSDN通过智能技术生成

简介

这篇文章主要是用来将学习的AOP用以实践,如果不清楚aop的使用方法,可以参考:android架构师之路——AOP讲解,如果想要直接使用可以参考:PermissionsDispatcher,如果是学习android 6.0权限申请可以参考:android 6.0 权限申请

项目结构

@NeedPermission 请求权限的标注,有两个参数:1、value()数组,请求权限数组。2、requestCode请求权限返回的code值
@PermissionCancled 申请权限结果处理,取消权限的标注(请求权限时候,点击取消),有一个参数:requestCode(对应@NeedPermission中的requestCode)
@PermissionDenied 申请权限结果处理,不再提醒的标注(请求权限时候,有一个不在提醒的checkbox)
PermissionAspect 处理@NeedPermission、@PermissionCancled、@PermissionDenied标注,以及请求权限的处理,是这个demo的重点
CancelBean 与@PermissionCancled一起使用,包含了取消权限的equestCode值,用来处理取消权限以后的逻辑
DenyBean 与@PermissionDenied一起使用,包含了不在提醒的requestCode值,以及不在提醒的权限集合denyList
IPermission 权限申请的接口
PermissionUtil 申请权限的一些方法
Utils 工具类方法
MainActivity 主activity
PermissionRequestActivity 一个透明的activity,用来申请权限

 代码介绍

  • 主入口MainActivity

@NeedPermission申请了两个权限Manifest.permission.CALL_PHONE, Manifest.permission.CAMERA

@PermissionCancled申请权限被拒绝后的处理

@PermissionDenied 申请权限被拒绝,并且不在提醒的处理

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @NeedPermission(value = {Manifest.permission.CALL_PHONE, Manifest.permission.CAMERA},requestCode = 100)
    public void requestPermission(View view) {
        Log.e("zkq","请求权限");
    }

    @PermissionCancled
    public void cancle(CancelBean bean) {
        Log.e("zkq","拒绝");
        int requestCode = bean.getRequestCode();
        if (requestCode==100){
            Log.e("zkq","requestCode==100的被拒绝了");
        }
    }

    @PermissionDenied
    public void defied(DenyBean bean) {
        List<String> denyList = bean.getDenyList();
        for (String s : denyList) {
            Log.e("zkq","已经拒绝,不再提醒 : "+s);
        }
    }
}
  • 标注

NeedPermission

/**
 * 请求权限
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NeedPermission {
    String[] value();

    //默认值 0
    int requestCode() default 0;
}

 PermissionCancled

/**
 * 取消权限
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PermissionCancled {
    int requestCode() default 0;
}

 PermissionDenied

/**
 * 拒绝权限并且选中不再提示
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值