博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EasyAndroid基础集成组件库之:EasyPermissions 动态权限申请库
阅读量:6074 次
发布时间:2019-06-20

本文共 1898 字,大约阅读时间需要 6 分钟。

什么是EasyAndroid?

是一款专注于提供各种基础组件的集成库

作为一款集成组件库,此库中所集成的组件,均包含以下特点:

  1. 精简: 作为一款集成库,我不希望有那种大组件,尽量控制好集成库的大小。不要有冗余代码
  2. 内聚: 尽量减少甚至避免单一组件对别的模块进行依赖。做到组件间独立。

什么是EasyPermissions

EasyPermissions是开源库的基础组件之一,用于对Android 6.0及以上版本,进行动态权限申请

若你不需要其他集成组件。只想用EasyPermissions。可以直接拷贝到项目中,直接进行使用。

特性

  • api链式调用,调用链更丝滑~
  • 支持定制权限申请说明弹窗
  • 支持同时申请多个权限
  • 多权限申请时进行去重
  • 支持在任意线程进行权限申请

流程图

下面的图为通用的动态权限申请流程图。EasyPermissions的执行流程也是与此一致的

用法举例

1. 申请写入联系人权限:(单一权限申请)

EasyPermissions.create(Manifest.permissions.WRITE_CONTACTS)	.request(activity)复制代码

PS: 请注意此处的request方法传入的Activity,需要为当前栈顶层的Activity实例,否则将可能导致无法接收权限返回信息的问题

2. 同时申请多个权限

EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE,                        Manifest.permission.WRITE_CALENDAR,                        Manifest.permission.WRITE_CONTACTS                ).request(this)复制代码

3. 接收权限申请结果

EasyPermissions.create(permission1, permission2 ... permissionN)		.callback {grant:Boolean -> // grant为true表示所有权限均申请成功}		.request(activity)复制代码

4. 定制权限申请说明弹窗

权限申请说明部分的流程为上方流程图中的Rational部分。这部分流程系统只提供了shouldShowRequestPermissionRationale方法提示开发者:这里需要向用户展示申请此权限的原因,以达到更好的用户体验

所以,EasyPermissions也对应提供了rational方法,进行方便的创建说明提醒:

EasyPermissions.create(permissions)	.retional { 		permission:String, // 需要进行用户提示的权限		chain: RationalChain -> // 内部API。若需要提示时,则需要使用此链表在用户操作后接入后续流程		// 返回true。表示此permission权限将会进行提醒说明, 		// 先暂时对权限申请流程进行阻塞,待后续用户操作后,通过chain实例进行流程唤醒		return@rational true|false	}	.request(activity)复制代码

举个具体例子

EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE)    .rational { permission, chain ->        AlertDialog.Builder(this)                .setTitle("权限申请说明")                .setMessage("应用需要此权限:\n$permission")                .setNegativeButton("拒绝", {_, _ -> chain.cancel()// 通知用户拒绝 })                .setPositiveButton("同意", {_, _ -> chain.process()// 用户同意,继续流程 })                .show()        return@rational true    }.callback(callback)    .request(this)复制代码

效果展示

转载地址:http://mdigx.baihongyu.com/

你可能感兴趣的文章
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>
spark高级排序彻底解秘
查看>>
ylbtech-LanguageSamples-PartialTypes(部分类型)
查看>>
福建省促进大数据发展:变分散式管理为统筹集中式管理
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
tomcat多应用之间如何共享jar
查看>>
Flex前后台交互,service层调用后台服务的简单封装
查看>>
技术汇之物联网设备网关技术架构设计
查看>>
OSX10.11 CocoaPods 升级总结
查看>>
深入浅出Netty
查看>>
3.使用maven创建java web项目
查看>>
笔记本搜索不到某一AP广播的SSID,信道的原因
查看>>
基于Spring MVC的异常处理及日志管理
查看>>
MediaBrowserService 音乐播放项目《IT蓝豹》
查看>>
MySQL入门12-数据类型
查看>>
Windows Azure 保留已存在的虚拟网络外网IP(云服务)
查看>>
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>