百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
A

android_permission_aspectjx

> 编程语言
开源

一个使用 aspectjx 处理 Android M 权限的 AOP 库。

357 stars0 点赞0 次浏览
访问官网GitHub

工具介绍

一个使用 aspectjx 处理 Android M 权限的 AOP 库。

Android_Permission_AspectjX

简单,方便的Android M动态权限配置框架,基于AOP方式aspectjx,支持类,方法的权限配置,更中意的是支持依赖库里的Activity的权限配置,你不再担心依赖第三方库出现权限问题怎么办了。

依赖

gradle 依赖

compile 'com.firefly1126.permissionaspect:permissionaspect:1.0.1'

最新版本查看这里

该库必须配合aspectjx使用

使用

1. 在Application的onCreate里初始化

PermissionCheckSDK.init(Application);

2. 在app层动态添加权限的两种方式

  • 使用PermissionCheckSDK.addCheckPermissionItem(CheckPermissionItem item)

通过这种方式可以给app里的Activity及依赖的第三方库的Activity类分配动态权限

例如:

//在Application里初始化app里所有Activity的权限
 String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        AOPSDK.addCheckPermissionItem(new CheckPermissionItem("com.hujiang.hjwordbookuikit.app.activity.RawWordActivity", permissions));
  • 使用注解的方式添加权限@NeedPermission

@NeedPermission可以作用于所有类的方法(包括静态方法和私有方法)及所有的Activity类

注意:

1、@NeedPermission建议不要使用在带返回值的函数上,因为函数一旦被中断,函数返回值可能会异常;
2、@NeedPermission建议不要使用在系统组件的生命周期回调接口上,因为这样可能会影响系统组件正常的生命周期(比如:Activity的onCreate,onResume,onPause等)。
//作用于Activity
@NeedPermission(permissions = {Manifest.permission.READ_CONTACTS
        , Manifest.permission.WRITE_CONTACTS})
public class BActivity extends Activity {
}

//作用于类的方法
    @NeedPermission(permissions = {Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
    private void startBActivity(String name, long id) {
        startActivity(new Intent(MainActivity.this, BActivity.class));
    }
  • @NeedPermission参数说明
…

建议

1、 建议权限申请的触发时机放在Activity类及Activity,Fragment的成员函数上面,不建议在Service等后台环境中触发;

2、 READ_PHONE_STATE和WRITE_EXTERNAL_STORAGE这两个权限是使用非常频繁的权限,建议在BaseActivity里面申请这两个权;

3、 当用户点击home键回到桌面去设置关闭权限,然后再从最近任务里恢复app上一次的界面时,可能会出现权限被漏申请的问题,这个时候建议将READ_PHONE_STATE和WRITE_EXTERNAL_STORAGE这两个使用非常频繁的权限放到BaseActivity里去申请;

4、@NeedPermission可以使用在Application的方法上,当你的app在启动是需要申请大量权限时, 可以用这种方法, 如果用户禁止权限,则不进入app

5、 如果不想使用AOP方案控制权限申请逻辑,可以使用下面的方案:

CheckPermission.instance(context).check(permissionItem, new PermissionListener() {
                    @Override
                    public void permissionGranted() {
                        //获取到权限时执行正常业务逻辑
                    }

                    @Override
                    public void permissionDenied() {
                        //权限被拒绝时给用户友好提示
                    }
                });

危险权限列表


CALENDAR:
	READ_CALENDAR
	WRITE_CALENDAR

CAMERA:
	CAMERA

CONTACTS:
	READ_CONTACTS
	WRITE_CONTACTS
	GET_ACCOUNTS
	
LOCATION:	
	ACCESS_FINE_LOCATION
	ACCESS_COARSE_LOCATION

MICROPHONE:	
	RECORD_AUDIO
	
PHONE:
	READ_PHONE_STATE
	CALL_PHONE
	READ_CALL_LOG
	WRITE_CALL_LOG
	ADD_VOICEMAIL
	USE_SIP
	PROCESS_OUTGOING_CALLS

SENSORS:
	BODY_SENSORS

SMS	:
	SEND_SMS
	RECEIVE_SMS
	READ_SMS
	RECEIVE_WAP_PUSH
	RECEIVE_MMS
	
STORAGE:	
	READ_EXTERNAL_STORAGE
	WRITE_EXTERNAL_STORAGE
	

第三方固件问题汇总

  • 官方固件

大部分手机固件权限申请模式和官方做法比较一致,这里不多细说

  • 小米固件

发现在小米手机上以下权限在真正使用前去申请权限会直接授权通过,当真正使用到权限时才会弹系统授权页面,但不影响正常的权限申请流程:

ACCESS_FINE_LOCATION
READ_CONTACTS
READ_PHONE_STATE

READ_SMS
BODY_SENSORS
  • 联想ZUK

联想ZUK的做法是将读写磁盘权限和获取手机状态这两个权限永远开启,权限设置界面的开关完全是摆设。但是也出现过你不管怎样设置读写磁盘权限开关,写SDCard都会报异常的Bug,这个应该是固件的Bug,app无能为力,卸载app重新安装就OK了。

License

Copyright (C) 2016 firefly1126, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Java

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言