# XdwPermissionsLib **Repository Path**: xdw1019/XdwPermissionsLib ## Basic Information - **Project Name**: XdwPermissionsLib - **Description**: 鸿蒙权限请求框架,提供一个符合正规权限调用流程的框架并基于链式调用(这里简称strong模式),同时提供一个并不推荐使用的简单权限框架(简称lazy模式)。 strong模式:正式项目推荐使用该模式。正规权限处理流程,用户需要检验权限并且处理校验结果的回调。 lazy模式:该模式下开发者几乎不用去编写请求权限的代码,特别是不处理回调。该模式不推荐在正式项目中使用 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-09-03 - **Last Updated**: 2022-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # XdwPermissionsLib #### 介绍 鸿蒙权限请求框架,提供一个符合正规权限调用流程的框架并基于链式调用(这里简称strong模式),同时提供一个并不推荐使用的简单权限框架(简称lazy模式)。 **strong模式**:正式项目推荐使用该模式。正规权限处理流程,用户需要检验权限并且处理校验结果的回调。 **lazy模式**:该模式下开发者几乎不用去编写请求权限的代码,特别是不处理回调。该模式不推荐在正式项目中使用,可以用于平时编写某些demo又不想处理权限的场景下。当然有些app不在乎用户体验,只要不授权就不让使用的情况可以使用该模式。 #### 动态申请权限流程图 ![img](img/鸿蒙动态权限申请流程图.png) #### 运行效果图展示: Strong模式下的效果图: 图片待补充 lazy模式下的效果图: 图片待补充 #### 使用说明 ##### Strong模式: 1.引用 方式一: 通过mylibrary模块生成har包,添加har包到libs文件夹内 方式二:maven引入(待后续上传到maven中心仓库再支持) 2.定义权限组,比如 ```java //定义需要动态申请的权限组,可以是一个或多个权限。这里的权限还必须要在config.json中进行配置 private String[] permissions = { // 存储权限 SystemPermission.WRITE_USER_STORAGE, // 相机权限 SystemPermission.CAMERA }; ``` 3.在需要触发权限申请的地方调用如下代码: ```java //开始动态申请权限,链式调用。 //实际开发中申请权限的动作应该放到需要用到该权限的操作中触发,比如点击某个按钮调起相机 StrongPermissionsUtils.getInstance(this).checkPermissions(this,permissions).setPermissionStateListener(new StrongPermissionsUtils.PermissionStateListener() { @Override public void onPermissionGranted() { //授权成功之后的回调 //此处根据自己的实际业务编写业务逻辑,此处用toast进行演示 ToastUtil.toast(getContext(),"授权成功"); } @Override public void onPermissionDenied(boolean isDisabledPrompt) { //授权拒绝之后的回调 //此处根据自己的实际业务编写业务逻辑,此处用toast进行演示 if(isDisabledPrompt){ ToastUtil.toast(getContext(),"您之前拒绝了授权并且禁止系统再提示,需要手动进入系统设置页面开启"); }else{ ToastUtil.toast(getContext(),"您拒绝了授权"); } } }); ``` 4.在当前的ability重写onRequestPermissionsFromUserResult方法,代码如下: ```java @Override public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults); //鉴权之后的回调,必须调用 StrongPermissionsUtils.getInstance(this).onRequestPermissionsResult(requestCode, permissions, grantResults); } ``` ##### Lazy模式: 1.引用 方式一: 通过mylibrary模块生成har包,添加har包到libs文件夹内 方式二:maven引入(待后续上传到maven中心仓库再支持) 2、将需要调用的Ability继承LazyPermissionAblity,如下: ```java public class MainAbility extends LazyPermissionAblity { ``` 3、在当前Ability中定义权限组,并且在onStart方法的第一行调用setPermissions方法,如下: ```java public class MainAbility extends LazyPermissionAblity { //定义需要动态申请的权限组,可以是一个或多个权限。这里的权限还必须要在config.json中进行配置 private String[] permissions = { // 存储权限 SystemPermission.WRITE_USER_STORAGE, // 相机权限 SystemPermission.CAMERA }; @Override public void onStart(Intent intent) { //lazy模式下,setPermissions的代码调用必须放在onStart的第一行 super.setPermissions(permissions); super.onStart(intent); super.setMainRoute(MainAbilitySlice.class.getName()); } } ``` #### 工程结构说明 工程中总共有三个module,分别为mylibrary、entry和LazySample。 **mylibrary:** 自定义的第三方权限库,供外部项目调用。 **entry:** 用来演示mylibrary库中strong模式下的权限调用。 **LazySample:** 用来演示mylibrary库中lazy模式下的权限调用。