Android权限请求框架ZcxPremission

ZcxPremission

ZcxPremission为权限请求框架,基于aspectj实现,使用注解即可请求权限,简单方便。
NeedPermission支持在所有的方法中使用和activity的类上使用,提供了权限前操作,权限后的处理(权限拒绝或不再提醒)等。

使用到的类:

  1. ZcxPermission:用于初始化的类
  2. @NeedPermission:请求权限的注解,可以作用于任何类的方法和activity类上,拥有参数:
    • value:要请求的权限
    • requestCode:请求码
    • isAllowExecution:当权限被拒绝是否继续执行
    • requestBefore:请求前调用的方法,和@PermissionBefore配合使用,会调用带有相同参数的被PermissionBefore注解的方法
    • permissionCanceled:请求被取消的方法,和@PermissionCanceled配合使用,会调用带有相同参数的被PermissionCanceled注解的方法
    • permissionDenied:请求被拒绝的方法,和@permissionDenied配合使用,会调用带有相同参数的被permissionDenied注解的方法
  3. @PermissionBefore:请求权限前的操作,可以在请求权限的本类中和配置类中使用,被注解的方法的参数只能是PermissionBeforeBean
    ,与NeedPermission联合使用,通过requestBefore匹配
  4. @PermissionCanceled:权限被取消(用户点击禁止权限)时调用的方法,可以在请求权限的本类中和配置类中使用
    ,被注解的方法的参数只能是PermissionCanceledBean,与Neddpermission联合使用,通过permissionCanceled匹配
  5. @PermissionDenied:权限被取消(用户勾选禁止后不再提示并点击禁止权限)时调用的方法,可以在请求权限的本类中和配置类中使用
    ,被注解的方法的参数只能是PermissionDeniedBean,与Neddpermission联合使用,通过permissionDenied匹配

使用方式

在你的Application的onCreate方法中使用ZcxPermission.getInstance().init()初始化,然后在需要权限的方法
ZcxPermissionConfig该类用于配置统一的权限前置操作、取消操作、拒绝操作的公共方法。

  public void onCreate() {
        super.onCreate();
        ZcxPermission.getInstance().init(getApplicationContext(),new ZcxPermissionConfig());//ZcxPermissionConfig如果不用可设置为null
}

方法中使用注解时:

@NeedPermission(value = {Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},
            requestBefore = Manifest.permission.CAMERA,permissionCanceled = Manifest.permission.CAMERA,
            permissionDenied = Manifest.permission.CAMERA,isAllowExecution = true)
    private void onClickContacts() {
        FragmentManager fragmentManager = getFragmentManager();
        Fragment cameraFragment = fragmentManager.findFragmentByTag("camera");
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        if (cameraFragment ==null) {
            fragmentTransaction.replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance(), "camera")
                    .addToBackStack("camera")
                    .commitAllowingStateLoss();
        }else {
            fragmentTransaction.show(cameraFragment);
        }
    }

activity中使用注解时:

@NeedPermission(value = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE},
        requestBefore = Manifest.permission.CAMERA, permissionCanceled = Manifest.permission.CAMERA,
        permissionDenied = Manifest.permission.CAMERA, isAllowExecution = true)
public class CameraActivity extends Activity implements PermissionListener {

    @Override
    public void onPermissionGranted() {
        mHasPermission =true;
        initCamera();
    }

    @Override
    public void onPermissionCanceled(PermissionCanceledBean bean) {

    }

    @Override
    public void onPermissionDenied(PermissionDeniedBean bean) {

    }

    @PermissionBefore
    public void before(final PermissionBeforeBean beforeBean){
        new android.support.v7.app.AlertDialog.Builder(this)
                .setTitle("我们需要相机权限来正常拍照")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        beforeBean.proceed(true);
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        beforeBean.proceed(false);
                    }
                })
                .show();
    }

}

ZcxPermissionConfig使用如下:

public    class ZcxPermissionConfig   {

    @PermissionBefore(Manifest.permission.CAMERA)//该注解注解的方法参数只能是PermissionBeforeBean
    public void before(final PermissionBeforeBean beforeBean){
        new android.support.v7.app.AlertDialog.Builder(beforeBean.getContext())
                .setTitle("来自配置文件,我们需要相机权限来正常拍照")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        beforeBean.proceed(true);//必须调用这个方法,确保正常往下执行
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        beforeBean.proceed(false);//必须调用这个方法,确保正常往下执行
                    }
                })
                .show();
    }

    @PermissionCanceled(Manifest.permission.CAMERA)//该注解注解的方法参数只能是PermissionCanceledBean
    public void cancel(final PermissionCanceledBean canceledBean){
        new android.support.v7.app.AlertDialog.Builder(canceledBean.getContext())
                .setTitle("来自配置文件,我们需要相机权限,请同意")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        canceledBean.againRequest();//调用该方法重试请求
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .show();
    }

    @PermissionDenied(Manifest.permission.CAMERA)//该注解注解的方法参数只能是PermissionDeniedBean
    public void denied(final PermissionDeniedBean deniedBean){
        new android.support.v7.app.AlertDialog.Builder(deniedBean.getContext())
                .setTitle("来自配置文件,我们需要权限,是否设置")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        deniedBean.toSettingActivity();//打开设置界面设置权限
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .show();
    }

}

当然,如果你还有什么特殊需要也可以直接用工具类PermissionUtils

PermissionUtils.requestPermissions(context, permissions, requestCode, new PermissionListener() {
            @Override
            public void onPermissionGranted() {

            }

            @Override
            public void onPermissionCanceled(PermissionCanceledBean bean) {

            }

            @Override
            public void onPermissionDenied(PermissionDeniedBean bean) {

            }
        });

依赖

在你的根目录的build.gradle中添加配置com.github.xiaoXiangGuo:ZcxAspectj:1.0.1如下:

buildscript {

    repositories {
        maven { url "https://jitpack.io" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.github.xiaoXiangGuo:ZcxAspectj:1.0.1'
    }
}
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

然后在你的app的build.gradle中使用插件和依赖

apply plugin: 'com.android.application'
apply plugin: 'zcx-aspectj-plugin'
dependencies {
    implementation 'com.github.xiaoXiangGuo:ZcxPremission:1.0.1'
}

项目地址:https://github.com/xiaoXiangGuo/ZcxPremission
欢迎使用

原文地址:https://www.cnblogs.com/xiaoXiangGuo/p/11684671.html

时间: 2024-11-05 22:42:15

Android权限请求框架ZcxPremission的相关文章

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

【Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

一种Android数据请求框架

大部分Android应用一般都涉及到跟server的交互,除非是某些单机应用.既然要跟server打交道,向server请求数据差点儿是必做的事情,或许每家的APP都有一套自己的详细实现逻辑.但我们还是能够抽象出来一个通用的数据请求框架. 先上图: 我们来详细分析一下.首先竖直虚线左側是Androidclient.右側是server.后台数据库. 左側图中,3个灰色的模块就是Android中的MVC(具体介绍请參考之前的一篇文字<Android中的MVC模式简单介绍>),当中Activity或

Android网络请求框架 Volley 你所要知道的一切

Volley是2013年谷歌官方推出的Android平台的网络通信库,Volley适用于并发和对效率.性能要求比较高的场景. 1.Volley的特点 优点: (1)使通信更快.更简单 (2)高效的get.post网络请求以及网络图像的高效率异步处理请求 (3)能对网络请求进行排序.优先级处理 (4)网络图片加载和缓存 (5)多级别取消请求,当有多个网络请求同时进行的时候,可以进行同时取消操作 (6)和Activity生命周期的联动,当Activity结束销毁时,可以同时取消网络请求操作 (7)性

Volley网络请求框架简析——Android网络请求框架(三)

题记-- 人来到这个世界上,只有两件事情,生与死, 一件事完了,另一件事还急什么? 有缘而来,无缘而去, 识自本心,见自本性 不起妄缘,无心无为 自由自在,动静自如 冷暖自知,则是修行 1.初始化一个消息请求队列以及网络请求工具类对象 /** * Created by androidlongs on 16/7/1. * 网络请求访问框架 */ public class VollyRequestUtils { /** * Volley框架使用工具类对象 */ private static Voll

Android网络请求框架—OKHttp 源码解析

总体流程 整个流程是,通过OkHttpClient将构建的Request转换为Call,然后在RealCall中进行异步或同步任务,最后通过一些的拦截器interceptor发出网络请求和得到返回的response. 将流程大概是这么个流程,大家可以有个大概的印象,继续向下看: OkHttp流程图.jpg 为了让大家有更深的印象,我准备追踪一个GET网络请求的具体流程,来介绍在源码中发生了什么. GET请求过程 这是利用OkHttp写一个Get请求步骤,这里是一个同步的请求,异步的下面也会说:

RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { font: 12.0px "Helvetica Neue" } 新建工程集成,工具集成 一.集成 RxAndroid+RxJava git官网 https://github.com/ReactiveX/RxAndroid Gson git官网 https://github.co

一个垃圾的Android权限框架

一个垃圾的Android权限框架 学习和参考 简书 https://www.jianshu.com/p/2324a2bdb3d4 写在前头 今天突发奇想想要把Android申请权限的流程封装一下,为使得Android的权限申请更加容易一些.所以经过一番资料的查询和研究,做了一个小小的垃圾权限框架,不优雅也不高效. 项目信息 Github地址 https://github.com/littledavid-tech/GarbagePermission 如何使用此框架 添加依赖 Step 1. Add

GoogleIO 2013 Android快速联网框架Volley介绍

最近调研Android开发框架,看了xutils,KjFramework等框架的HTTP模块,觉得都太简单了,只是简单封装了HttpUrlConnenction和Handler,加了个回调函数,感觉就是比自己写一个好一点点.后面发现了Volley这个比较靠谱的Android网络请求框架,就用它了. Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮. 这是Volley名称的由来: a burst or emission of many things or a lar