MCPcopy Index your code
hub / github.com/crazyqiang/Aopermission

github.com/crazyqiang/Aopermission @1.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.2.0 ↗ · + Follow
85 symbols 189 edges 21 files 32 documented · 38%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Aopermission

AOP方式封装的6.0运行时申请权限的库—A library that request Permissions in an AOP manner.

  • BLOG地址:https://blog.csdn.net/u013700502/article/details/79748829

  • 点此查看效果图: https://upload-images.jianshu.io/upload_images/587163-78cf7c69a1e04c66.gif?imageMogr2/auto-orient/strip

downloadQR.png 扫描二维码或点此下载APK

更新日志

2019-06-13

1、jcenter升级到1.2.0
2、修改8.0系统上透明activity引起的bug
3、targetSDK升级到28 
4、支持在util类中的非静态方法中申请权限(方法中的第一个参数传入context,如果参数为空,默认使用的是application)

UML Sequence Chart(UML时序图)

UML时序图.png

How to use

一、配置

1、权限库引入方式,在app模块的build.gradle中引入如下:

apply plugin: 'android-aspectjx'

dependencies {
     compile 'com.ninetripods:aop-permission:1.2.0'
     ..........其他............
}

//可选配置:include和exclude的规则是去匹配包名,如果找到匹配的包名,则整个jar(即整个库)生效,
//这样做主要是考虑到性能的问题。
aspectjx {
    include 'com.ninetripods','使用注解所在的包名'
}

点此查看最新版本:https://jcenter.bintray.com/com/ninetripods/aop-permission/

2、在根目录的build.gradle里面配置如下:

dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'//替换你的gradle版本
    classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
    ................其他................
}

说明:aspectjx:2.0.4目前是最新版本,aspectjx历史版本查看地址: https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/blob/master/CHANGELOG.md

3、本项目中在AOP类中用到了反射,如果你的项目中在混淆后导致权限申请失败,将下面的配置加到你的混淆配置中:

-keepclasseswithmembers class * {
    @com.ninetripods.aopermission.permissionlib.annotation.NeedPermission <methods>;
}

-keepclasseswithmembers class * {
    @com.ninetripods.aopermission.permissionlib.annotation.PermissionCanceled <methods>;
}

-keepclasseswithmembers class * {
    @com.ninetripods.aopermission.permissionlib.annotation.PermissionDenied <methods>;
}

二、使用举例

1、申请单个权限

申请单个权限:

btn_click.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        callMap();
    }
});

/**
 * 申请权限
 */
@NeedPermission(value = {Manifest.permission.ACCESS_FINE_LOCATION}, requestCode = 0)
private void callMap() {
    Toast.makeText(this, "定位权限申请通过", Toast.LENGTH_SHORT).show();
}

@NeedPermission后面的value代表需要申请的权限,是一个String[]数组;requestCode是请求码,是为了区别开同一个Activity中有多个不同的权限请求,默认是0,如果同一个Activity中只有一个权限申请,requestCode可以忽略不写。

/**
 * 权限被取消
 *
 * @param bean CancelBean
 */
@PermissionCanceled
public void dealCancelPermission(CancelBean bean) {
    Toast.makeText(this, "requestCode:" + bean.getRequestCode(), Toast.LENGTH_SHORT).show();
}

声明一个public方法接收权限被取消的回调,方法必须有一个CancelBean类型的参数,这点类似于EventBus,CancelBean中有requestCode变量,即是我们请求权限时的请求码。

/**
 * 权限被拒绝
 *
 * @param bean DenyBean
 */
@PermissionDenied
public void dealPermission(DenyBean bean) {
        Toast.makeText(this,
        "requestCode:" + bean.getRequestCode()+ ",Permissions: " + Arrays.toString(bean.getDenyList().toArray()), Toast.LENGTH_SHORT).show();
  }

声明一个public方法接收权限被取消的回调,方法必须有一个DenyBean类型的参数,DenyBean中有一个requestCode变量,即是我们请求权限时的请求码,另外还可以通过denyBean.getDenyList()来拿到被权限被拒绝的List。

2、申请多个权限

基本用法同上,区别是@NeedPermission后面声明的权限是多个,如下:

/**
 * 申请多个权限
 */
@NeedPermission(value = {Manifest.permission.CALL_PHONE, Manifest.permission.CAMERA}, requestCode = 10)
public void callPhone() {
    Toast.makeText(this, "电话、相机权限申请通过", Toast.LENGTH_SHORT).show();
}

value中声明了两个权限,一个电话权限,一个相机权限

Thanks To

https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx

Extension points exported contracts — how you extend this code

ISetting (Interface)
Created by mq on 2018/3/8 下午3:24 mqcoder90@gmail.com [6 implementers]
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/interf/ISetting.java
IPermission (Interface)
Created by mq on 2018/3/6 下午2:52 mqcoder90@gmail.com [1 implementers]
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/interf/IPermission.java

Core symbols most depended-on inside this repo

go2Setting
called by 5
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/util/SettingUtil.java
getRequestCode
called by 3
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/bean/DenyBean.java
getSetting
called by 2
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/interf/ISetting.java
PermissionGranted
called by 2
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/interf/IPermission.java
getContext
called by 2
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/bean/DenyBean.java
getApp
called by 2
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/util/Utils.java
getApplicationByReflect
called by 2
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/util/Utils.java
requestPermission
called by 1
app/src/main/java/com/ninetripods/aopermission/PermissionFragment.java

Shape

Method 67
Class 16
Interface 2

Languages

Java100%

Modules by API surface

app/src/main/java/com/ninetripods/aopermission/MainActivity.java11 symbols
app/src/main/java/com/ninetripods/aopermission/PermissionService.java9 symbols
app/src/main/java/com/ninetripods/aopermission/PermissionFragment.java8 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/bean/DenyBean.java7 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/util/PermissionUtil.java6 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/aop/PermissionAspect.java6 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/bean/CancelBean.java5 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/PermissionRequestActivity.java5 symbols
app/src/main/java/com/ninetripods/aopermission/RequestPermissionByUtil.java5 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/util/Utils.java4 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/interf/IPermission.java4 symbols
permissionlib/src/main/java/com/ninetripods/aopermission/permissionlib/support/ViVo.java3 symbols

For agents

$ claude mcp add Aopermission \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page