EasyAndroid是一款专一于提供各类基础组件的集成库java
做为一款集成组件库,此库中所集成的组件,均包含如下特色:android
EasyPermissions是开源库EasyAndroid的基础组件之一,用于对Android 6.0及以上版本,进行动态权限申请
git
若你不须要其余集成组件。只想用EasyPermissions。能够直接拷贝集成库中的EasyPermissions类到项目中,直接进行使用。github
下面的图为通用的动态权限申请流程图。EasyPermissions的执行流程也是与此一致的api
EasyPermissions.create(Manifest.permissions.WRITE_CONTACTS)
.request(activity)
复制代码
PS: 请注意此处的request方法传入的Activity,须要为当前栈顶层的Activity实例,不然将可能致使没法接收权限返回信息的问题bash
EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.WRITE_CALENDAR,
Manifest.permission.WRITE_CONTACTS
).request(this)
复制代码
EasyPermissions.create(permission1, permission2 ... permissionN)
.callback {grant:Boolean -> // grant为true表示全部权限均申请成功}
.request(activity)
复制代码
权限申请说明
部分的流程为上方流程图中的Rational部分。这部分流程系统只提供了shouldShowRequestPermissionRationale
方法提示开发者:这里须要向用户展现申请此权限的缘由,以达到更好的用户体验。ui
因此,EasyPermissions也对应提供了rational方法,进行方便的建立说明提醒:this
EasyPermissions.create(permissions)
.retional {
permission:String, // 须要进行用户提示的权限
chain: RationalChain -> // 内部API。若须要提示时,则须要使用此链表在用户操做后接入后续流程
// 返回true。表示此permission权限将会进行提醒说明,
// 先暂时对权限申请流程进行阻塞,待后续用户操做后,经过chain实例进行流程唤醒
return@rational true|false
}
.request(activity)
复制代码
举个具体例子spa
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)
复制代码