目前项目已经慢慢的迁移到了kotlin语言,基于kotlin协程很容易编写出漂亮的异步结构代码,而由于协程天然自带挂起属性,所以我们的项目中移除了对rxjava的依赖,而对于权限申请一直没有特别好的替代产品,所以写了这个PermissionX来替换RXPermission库。
一、PermissionX介绍
PermissionX:一个Kotlin库,用于Android应用程序基于协程方便获取权限请求,简化权限处理。
二、PermissionX优势:
1、简单的请求接口。
suspend fun requestPermissions(fragmentActivity: FragmentActivity,permissionList: ArrayList<String>
)
2、任何地方可调用(Activity、Fragment、Dialog...)
3、同步形式调用,消除回调,获取权限请求结果。
4、支持用户拒绝权限请求后的提示引导。
三、PermissionX的接入:
implementation("com.gitee.gggl:permissionx:1.0.4")
lifecycleScope.launch {val permissionList = arrayListOf<String>(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.ACCESS_COARSE_LOCATION)val permissionXResultMap = requestPermissions(this@MainActivity , permissionList)findViewById<TextView>(R.id.all_granted_tv).setText("${permissionXResultMap.allGranted}")val resultSb = StringBuilder()permissionXResultMap.forEach { t, u ->resultSb.append("permission $t: granted = ${u.granted} , hasRefuse = ${u.hasRefuse} \n")}findViewById<TextView>(R.id.result_tv).setText(resultSb.toString())}
返回结果结构:
permission:权限名称
granted:是否拥有权限
hasRefuse:用户是否拒绝权限,如果用户拒绝权限,可弹窗引导用户打开设置赋予权限。
data class PermissionXResult(var permission: String,var granted: Boolean,/*** The user has previously refused permission requests and needs a pop-up window to guide the user to set the interface* */var hasRefuse: Boolean = false
)
结论:
就是这么简单,散会
git地址:
permissionx: PermissionX: A Kotlin library for easy, coroutine-based permission requests in Android apps, simplifying permission handling and providing user guidance for denied permissions.