All Projects → goweii → AnyPermission

goweii / AnyPermission

Licence: LGPL-3.0 license
Android权限申请(运行时权限、未知应用安装权限、悬浮窗权限、显示通知和访问通知权限)

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to AnyPermission

Laravel Permission
Associate users with roles and permissions
Stars: ✭ 10,024 (+22681.82%)
Mutual labels:  permission
Think Casbin
专为ThinkPHP定制的Casbin的扩展包,Casbin是一个功能强大,高效的开源访问控制库。
Stars: ✭ 138 (+213.64%)
Mutual labels:  permission
Easypermission
一个非常轻便而且可用的Android动态权限申请库
Stars: ✭ 192 (+336.36%)
Mutual labels:  permission
Casbin Cpp
An authorization library that supports access control models like ACL, RBAC, ABAC in C/C++
Stars: ✭ 113 (+156.82%)
Mutual labels:  permission
Permissionsdispatcher
A declarative API to handle Android runtime permissions.
Stars: ✭ 10,851 (+24561.36%)
Mutual labels:  permission
D2 Crud Plus
面向配置的crud框架,基于d2-admin的d2-crud,简化d2-crud配置,快速开发crud功能;支持远程数据字典,国际手机号校验,alioss、腾讯云cos、七牛云文件上传、头像裁剪,省市区选择,权限管理,代码生成
Stars: ✭ 154 (+250%)
Mutual labels:  permission
Vakt
Attribute-based access control (ABAC) SDK for Python
Stars: ✭ 92 (+109.09%)
Mutual labels:  permission
Rxpermission
RxSwift bindings for Permissions API in iOS.
Stars: ✭ 234 (+431.82%)
Mutual labels:  permission
Permission
一款带ui基于RBAC模型的可自由配置的原生的权限框架
Stars: ✭ 127 (+188.64%)
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 (+329.55%)
Mutual labels:  permission
Node Casbin
An authorization library that supports access control models like ACL, RBAC, ABAC in Node.js and Browser
Stars: ✭ 1,757 (+3893.18%)
Mutual labels:  permission
Guardian
Eloquent Guardian is a simple permissions system for your users. While there are many other packages for permissions, this one solves everything in the most eloquent way.
Stars: ✭ 121 (+175%)
Mutual labels:  permission
Metal
基于beego开发的网站,管理后台系统,包含功能:登录,用户管理,权限管理,多线程获取数据,定时任务,爬虫,markdown,七牛上传图片。
Stars: ✭ 165 (+275%)
Mutual labels:  permission
Publishcommunity Master
仿微博,QQ空间,论坛 ,九宫格图文混排发表说说,动态,帖子
Stars: ✭ 107 (+143.18%)
Mutual labels:  permission
Dllspy
DLL Hijacking Detection Tool
Stars: ✭ 202 (+359.09%)
Mutual labels:  permission
Jcasbin
An authorization library that supports access control models like ACL, RBAC, ABAC in Java
Stars: ✭ 1,335 (+2934.09%)
Mutual labels:  permission
Filesystem
FileSystem is an application that allows you to browse the content of your iPhone disk, displaying file and folders, files contents, and detailed informations about file and folder permissions.
Stars: ✭ 148 (+236.36%)
Mutual labels:  permission
Cancan
cancan is a tiny permission controller base on ruby cancan library.
Stars: ✭ 244 (+454.55%)
Mutual labels:  permission
Vue Blog
🎉 基于vue全家桶 + element-ui 构建的一个后台管理集成解决方案
Stars: ✭ 208 (+372.73%)
Mutual labels:  permission
Xxpermissions
Android 权限请求框架,已适配 Android 12
Stars: ✭ 2,971 (+6652.27%)
Mutual labels:  permission

AnyPermission

GitHub主页

Demo下载

概述

是对AndPermission的封装,用于快速申请Android权限,链式调用,适配绝大多数国产系统。

  • 运行时权限
  • 未知应用安装权限
  • 悬浮窗权限
  • 显示通知权限
  • 访问通知权限

在申请多个权限时,本框架采用排队方式申请,即先申请第一个权限,第一个申请成功后再进行下一个的申请流程,第一个失败则为本次申请失败。流程图如下。

流程图

快速集成

一、添加仓库地址

在Project的build.gradle添加仓库地址

allprojects {
	repositories {
		...
		maven { url 'https://www.jitpack.io' }
	}
}

二、添加框架依赖

在Model:app的build.gradle添加框架依赖

最新版本可查看Releases

dependencies {
	implementation 'com.github.goweii:AnyPermission:1.0.0'
}

使用说明

运行时权限

private void requestRuntime() {
    mRuntimeRequester = AnyPermission.with(this).runtime(1)
            .permissions(Manifest.permission.CAMERA,
                    Manifest.permission.CALL_PHONE)
            .onBeforeRequest(new RequestInterceptor<String>() {
                @Override
                public void interceptor(@NonNull final String permission, @NonNull final Executor executor) {
                    // TODO 在每个权限申请之前调用,多次回调。可弹窗向用户说明下面将进行某个权限的申请。
                    // processor有两个方法,必须调用其一,否则申请流程终止。
                }
            })
            .onBeenDenied(new RequestInterceptor<String>() {
                @Override
                public void interceptor(@NonNull final String permission, @NonNull final Executor executor) {
                    // TODO 在每个权限被拒后调用,多次回调。可弹窗向用户说明为什么需要该权限,否则用户可能在下次申请勾选不再提示。
                    // processor有两个方法,必须调用其一,否则申请流程终止。
                }
            })
            .onGoSetting(new RequestInterceptor<String>() {
                @Override
                public void interceptor(@NonNull final String permission, @NonNull final Executor executor) {
                    // TODO 在每个权限永久被拒后调用(即用户勾选不再提示),多次回调。可弹窗引导用户前往设置打开权限,调用executor.execute()会自动跳转设置。
                    // processor有两个方法,必须调用其一,否则申请流程将终止。
                }
            })
            .request(new RequestListener() {
                @Override
                public void onSuccess() {
                    // TODO 授权成功
                }

                @Override
                public void onFailed() {
                    // TODO 授权失败
                }
            });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (mRuntimeRequester != null) {
        mRuntimeRequester.onActivityResult(requestCode);
    }
}

未知应用安装权限

AnyPermission.with(this).install(apkFile)
        .onWithoutPermission(new RequestInterceptor<File>() {
            @Override
            public void interceptor(@NonNull final File data, @NonNull final Executor executor) {
                // TODO 在安装应用之前如果没有授予未知应用安装权限,则会回调该方法,可在此项用户弹窗提示。
                // processor有两个方法,必须调用其一,否则申请流程将终止。
            }
        })
        .request(new RequestListener() {
            @Override
            public void onSuccess() {
                // TODO 授权成功
            }

            @Override
            public void onFailed() {
                // TODO 授权失败
            }
        });

悬浮窗权限

AnyPermission.with(this).overlay()
        .onWithoutPermission(new RequestInterceptor<Void>() {
            @Override
            public void interceptor(@NonNull final Void data, @NonNull final Executor executor) {
                // TODO 在申请悬浮窗权限之前调用,可在此项用户弹窗提示。
                // processor有两个方法,必须调用其一,否则申请流程将终止。
            }
        })
        .request(new RequestListener() {
            @Override
            public void onSuccess() {
                // TODO 授权成功
            }

            @Override
            public void onFailed() {
                // TODO 授权失败
            }
        });

显示通知权限

AnyPermission.with(this).notificationShow()
        .onWithoutPermission(new RequestInterceptor<Void>() {
            @Override
            public void interceptor(@NonNull final Void data, @NonNull final Executor executor) {
                // TODO 在申请显示通知权限之前调用,可在此项用户弹窗提示。
                // processor有两个方法,必须调用其一,否则申请流程将终止。
            }
        })
        .request(new RequestListener() {
            @Override
            public void onSuccess() {
                // TODO 授权成功
            }

            @Override
            public void onFailed() {
                // TODO 授权失败
            }
        });

访问通知权限

AnyPermission.with(this).notificationAccess()
        .onWithoutPermission(new RequestInterceptor<Void>() {
            @Override
            public void interceptor(@NonNull final Void data, @NonNull final Executor executor) {
                // TODO 在申请访问通知权限之前调用,可在此项用户弹窗提示。
                // processor有两个方法,必须调用其一,否则申请流程将终止。
            }
        })
        .request(new RequestListener() {
            @Override
            public void onSuccess() {
                // TODO 授权成功
            }

            @Override
            public void onFailed() {
                // TODO 授权失败
            }
        });

API

RequestInterceptor

权限申请流程中回调,用于弹窗提醒用户。

void interceptor(@NonNull final T data, @NonNull final Executor executor)

Executor

控制流程的执行或取消。

/**
 * 继续流程
 **/
void execute()
    
/**
 * 取消流程,即回调到申请失败
 **/
void cancel()

AnyPermission

5种权限的申请都由此方法发起

/**
 * 构建AnyPermission实例
 **/
public static AnyPermission with(@NonNull final Context context)
public static AnyPermission with(@NonNull final Activity activity)
public static AnyPermission with(@NonNull final Fragment fragment)
public static AnyPermission with(@NonNull final android.app.Fragment fragment)
    
/**
 * 获取某一权限的名称
 **/
public String name(String permission)
    
/**
 * 获取文件对应的Uri
 **/
public Uri fileUri(File file)
    
/**
 * 获取运行时权限申请的实现类实例
 **/
public RuntimeRequester runtime(int requestCodeWhenGoSetting)
    
/**
 * 获取未知应用安装权限申请的实现类实例
 **/
public InstallRequester install(File apkFile)
    
/**
 * 获取悬浮窗权限申请的实现类实例
 **/
public OverlayRequester overlay()
    
/**
 * 获取显示通知权限申请的实现类实例
 **/
public NotificationShowRequester notificationShow()
    
/**
 * 获取访问通知权限申请的实现类实例
 **/
public NotificationAccessRequester notificationAccess()

RuntimeRequester

运行时权限申请的实现类

/**
 * 所需申请的权限
 **/
public RuntimeRequester permissions(String... permissions)

/**
 * 每个权限申请之前的回调
 **/
public RuntimeRequester onBeforeRequest(RequestInterceptor<String> onBeforeRequest)

/**
 * 每个权限被拒后的回调
 **/
public RuntimeRequester onBeenDenied(RequestInterceptor<String> onBeenDenied)

/**
 * 每个权限被永久拒绝后的回调
 **/
public RuntimeRequester onGoSetting(RequestInterceptor<String> onGoSetting)

/**
 * 开始申请
 **/
public RuntimeRequester request(@NonNull RequestListener listener)

/**
 * 从设置页返回的时候,需要在再Activity的onActivityResult()中调用
 **/
public void onActivityResult(int requestCode)

InstallRequester

未知应用安装权限申请的实现类

/**
 * 未授予权限时,在跳转设置页面之前调用
 **/
public InstallRequester onWithoutPermission(RequestInterceptor<File> onWithoutPermission)
    
/**
 * 开始申请
 **/
public void request(final RequestListener listener)

OverlayRequester

悬浮窗权限申请的实现类

/**
 * 未授予权限时,在跳转设置页面之前调用
 **/
public OverlayRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)
    
/**
 * 开始申请
 **/
public void request(final RequestListener listener)

NotificationShowRequester

显示通知权限申请的实现类

/**
 * 未授予权限时,在跳转设置页面之前调用
 **/
public NotificationShowRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)
    
/**
 * 开始申请
 **/
public void request(final RequestListener listener)

NotificationAccessRequester

访问通知安装权限申请的实现类

/**
 * 未授予权限时,在跳转设置页面之前调用
 **/
public NotificationAccessRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)
    
/**
 * 开始申请
 **/
public void request(final RequestListener listener)

常见问题

暂无

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].