All Projects → JunhuaLin → PermissionAgent

JunhuaLin / PermissionAgent

Licence: Apache-2.0 license
一次初始化处处可用的链式编程动态权限请求库

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to PermissionAgent

Andpermission
🍓 Permissions manager for Android platform.
Stars: ✭ 6,567 (+31171.43%)
Mutual labels:  permission, android-permission
silly-android
Android plugins for Java, making core Android APIs easy to use
Stars: ✭ 40 (+90.48%)
Mutual labels:  permission
Dllspy
DLL Hijacking Detection Tool
Stars: ✭ 202 (+861.9%)
Mutual labels:  permission
locus-android
An Awesome Kotlin Location library to retrieve location merely in 3 lines of code
Stars: ✭ 280 (+1233.33%)
Mutual labels:  android-permission
Rxpermission
RxSwift bindings for Permissions API in iOS.
Stars: ✭ 234 (+1014.29%)
Mutual labels:  permission
FrameSystem
WPF通用权限开发框架
Stars: ✭ 40 (+90.48%)
Mutual labels:  permission
Voice Overlay Android
🗣 An overlay that gets your user’s voice permission and input as text in a customizable UI
Stars: ✭ 189 (+800%)
Mutual labels:  permission
sqlx-adapter
Asynchronous casbin adapter for mysql, postgres, sqlite based on sqlx-rs
Stars: ✭ 27 (+28.57%)
Mutual labels:  permission
vue-admin-work
🎉🎉🚀🚀🚀🚀vue-admin-work是一个中后台系统管理方案。使用 vue2.x 及周边全家桶工具开发而来。支持多种功能,不同角色权限🚀🚀🚀🎉🎉
Stars: ✭ 74 (+252.38%)
Mutual labels:  permission
easypermissions-ktx
🔓 Kotlin version of the popular google/easypermissions wrapper library to simplify basic system permissions logic on Android M or higher.
Stars: ✭ 324 (+1442.86%)
Mutual labels:  permission
lua-casbin
An authorization library that supports access control models like ACL, RBAC, ABAC in Lua (OpenResty)
Stars: ✭ 43 (+104.76%)
Mutual labels:  permission
Cancan
cancan is a tiny permission controller base on ruby cancan library.
Stars: ✭ 244 (+1061.9%)
Mutual labels:  permission
android-helpers
Android helpers collection
Stars: ✭ 20 (-4.76%)
Mutual labels:  permission
Vue Blog
🎉 基于vue全家桶 + element-ui 构建的一个后台管理集成解决方案
Stars: ✭ 208 (+890.48%)
Mutual labels:  permission
objection-authorize
isomorphic, "magical" authorization integration with Objection.js 🎉
Stars: ✭ 71 (+238.1%)
Mutual labels:  permission
Easypermission
一个非常轻便而且可用的Android动态权限申请库
Stars: ✭ 192 (+814.29%)
Mutual labels:  permission
ng2-acl
Role based permissions for Angular v2++
Stars: ✭ 15 (-28.57%)
Mutual labels:  permission
actix-casbin-auth
Casbin Actix-web access control middleware
Stars: ✭ 40 (+90.48%)
Mutual labels:  permission
Acl
The Hoa\Acl library.
Stars: ✭ 27 (+28.57%)
Mutual labels:  permission
sqlalchemy-adapter
SQLAlchemy Adapter for PyCasbin
Stars: ✭ 53 (+152.38%)
Mutual labels:  permission

Permission Agent

GitHub license latest release pull requests welcome issues welcome

一次初始化处处可用的链式编程动态权限请求库

  • 链式编程
  • 不依赖Activity,Fragment
  • 运行时权限申请
  • 运行时权限组申请
  • 运行时权限和权限组混合申请
  • 支持多个权限并行申请
  • 支持多个权限串行申请
  • 支持特殊权限申请,如REQUEST_INSTALL_PACKAGES,SYSTEM_ALERT_WINDOW,ACCESS_NOTIFICATION_POLICY,WRITE_SETTINGS
  • 最小支持android 14
  • 多ROM多版本适配

使用

添加依赖

//android support
implementation 'cn.junhua.android:permission-agent:1.3.1'
//androidx
implementation 'cn.junhua.android:permission-agent-x:1.3.1'

初始化

//Application的onCreate中初始化
PermissionAgent.setDebug(BuildConfig.DEBUG);//开启debug
PermissionAgent.getInstance().init(this);

单个权限申请

PermissionAgent.getInstance()
                .request(Manifest.permission.CAMERA)
                //.code(123)//与你自定义code冲突时可以设置,一般不用自己设置
                .onGranted(new OnGrantedCallback<List<String>>() {
                    @Override
                    public void onGranted(Context context,List<String> permissions) {
                        //成功
                    }
                })
                .onDenied(new OnDeniedCallback<List<String>>() {
                    @Override
                    public void onDenied(Context context,List<String> permissions) {
                        //拒绝
                    }
                })
                .onRationale(new OnRationaleCallback<List<String>>() {
                    @Override
                    public void onRationale(Context context,List<String> permissions, AgentExecutor executor) {
                        //提示用户
                        executor.execute();//继续
                        executor.cancel();//取消
                        //do something
                    }
                })
                .apply();

并行请求多个权限

并行请求时,结果会同时返回。当onRationale回调时用户拒绝,不继续下面的请求,直接执行已授予的权限和拒绝(或未授予)的权限回调。

PermissionAgent.getInstance()
                .request(Manifest.permission.CAMERA, Manifest.permission.WRITE_CONTACTS)
                //.code(123)//与你自定义code冲突时可以设置,一般不用自己设置
                .onGranted(new OnGrantedCallback<List<String>>() {
                    @Override
                    public void onGranted(Context context,List<String> permissions) {
                         //成功
                    }
                })
                .onDenied(new OnDeniedCallback<List<String>>() {
                    @Override
                    public void onDenied(Context context,List<String> permissions) {
                       //拒绝
                    }
                })
                .onRationale(new OnRationaleCallback<List<String>>() {
                    @Override
                    public void onRationale(Context context,List<String> permissions, AgentExecutor executor) {
                       //提示用户
                       executor.execute();//继续
                       executor.cancel();//取消
                       //do something
                    }
                })
                .apply();

串行请求多个权限

串行请求时,权限会顺序请求,当前一个请求处理完成后才会请求后一个权限。 注意:当使用onRationale回调时,AgentExecutor必须回调execute()或者cancel()之一,才能执行后续请求。

PermissionAgent.getInstance()
                .requestEach(Manifest.permission_group.CONTACTS, Manifest.permission.ACCESS_COARSE_LOCATION)
                .onGranted(new OnGrantedCallback<List<String>>() {
                    @Override
                    public void onGranted(Context context,List<String> permissions) {
                        toast("onGranted() called with: permissions = [" + permissions + "]");
                        Log.d(TAG, "onGranted() called with: permissions = [" + permissions + "]");
                    }
                })
                .onDenied(new OnDeniedCallback<List<String>>() {
                    @Override
                    public void onDenied(Context context,List<String> permissions) {
                        toast("onDenied() called with: permissions = [" + permissions + "]");
                        Log.d(TAG, "onDenied() called with: permissions = [" + permissions + "]");
                    }
                })
                .onRationale(new OnRationaleCallback<List<String>>() {
                    @Override
                    public void onRationale(Context context,List<String> permissions, AgentExecutor executor) {
                        executor.execute();
                        toast("onRationale() called with: permissions = [" + permissions + "]");
                        Log.d(TAG, "onRationale() called with: permissions = [" + permissions + "], executor = [" + executor + "]");
                    }
                })
                .apply();

特殊权限

使用SpecialPermission枚举选择需要申请的特殊权限,其他操作不变。

SpecialPermission枚举如下:

  • SpecialPermission.REQUEST_INSTALL_PACKAGES 安装未知apk权限
  • SpecialPermission.WRITE_SETTINGS 修改设置权限
  • SpecialPermission.SYSTEM_ALERT_WINDOW 系统窗口权限
  • SpecialPermission.ACCESS_NOTIFICATION_POLICY 推送通知权限
PermissionAgent.getInstance()
                .request(SpecialPermission.REQUEST_INSTALL_PACKAGES)
                //.code(123)//与你自定义code冲突时可以设置,一般不用自己设置
                .onGranted(new OnGrantedCallback<SpecialPermission>() {
                    @Override
                    public void onGranted(Context context,SpecialPermission permissions) {
                        //成功
                    }
                })
                .onDenied(new OnDeniedCallback<SpecialPermission>() {
                    @Override
                    public void onDenied(Context context,SpecialPermission permissions) {
                         //拒绝
                    }
                })
                .onRationale(new OnRationaleCallback<List<String>>() {
                    @Override
                    public void onRationale(Context context,SpecialPermission permissions, AgentExecutor executor) {
                       //提示用户
                       executor.execute();//继续
                       executor.cancel();//取消
                       //do something
                    }
                })
                .apply();

注:当使用权限组请求权限时,会拆分为权限组内多有的单个权限一起去请求权限。

设置页面

PermissionAgent.getInstance().startSettingPage(0x123);

检测永久拒绝权限

//当权限被拒绝时候调用此方法,检测权限是否永远被拒绝
PermissionAgent.getInstance().hasAlwaysDeniedPermission(Manifest.permission.ACCESS_FINE_LOCATION)

检测权限

权限检测的工具方法,供单独使用时调用。

//检测单个权限
PermissionAgent.getInstance().checkPermission(Manifest.permission.ACCESS_FINE_LOCATION)

//检测多个权限,如果存在权限没有授予就返回false
PermissionAgent.getInstance().checkPermission(Manifest.permission.CALL_PHONE,
                        Manifest.permission.CAMERA)

//检测特殊权限,通过SpecialPermission选择权限
PermissionAgent.getInstance().checkPermission(SpecialPermission.ACCESS_NOTIFICATION_POLICY)

Debug日志输出

log标签分类两级:

  • 一级:TAG1=PermissionAgent可以过滤出本库所有的log日志,通过标签过滤可得。
  • 二级:TAG2=xxx.class.getSimpleName()可以过滤出xxx类的log日志,通过内容过滤可得。

log格式:D/{TAG1}: {TAG2}/{log msg}

感谢

感谢以下库或文章提供的思路和适配方案:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].