前言
市面上权限请求的库很多,而前段时间官方刚刚将 requestPermissions() + onRequestPermissionsResult() API 弃用,那么官方的替代方案是什么呢?本文将介绍 Activity Result API 进行权限请求的使用以及如何借助 Kotlin 扩展函数自己封装一个权限请求库
Activity Result API
在 Android Jetpack Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02 中,Google 提供了全新的 Activity Result API 来替换 startActivityForResult() + onActivityResult()和 requestPermissions() + onRequestPermissionsResult()。详情可移步 官方文档[1],中文可以参考 秉心说[2] 的 是时候丢掉 onActivityResult 了 ![3],有些 API 的名字发生了变化,请留意
requestPermissions() / onRequestPermissionsResult() 被弃用
紧接着在 Activity 1.2.0-alpha04 和 Fragment 1.3.0-alpha04 版本中,
startActivityForResult()+onActivityResult()和requestPermissions()+onRequestPermissionsResult()被标记为弃用,而在Fragment 1.3.0-alpha05 这些标记弃用的方法内部已改为使用 ActivityResultRegistry 实现
新 API 的使用
新的 API 使用非常简单,分为单一权限请求,和多权限请求,Activity 和 Fragment 使用方法相同
单一权限请求
val permission = Manifest.permission.WRITE_EXTERNAL_STORAGE
registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
// 请求结果,result 为 boolean true 代表已授权,false 代表未授权
}.launch(permission)
多权限请求
val permissions = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result: MutableMap<String, Boolean> ->
// 请求结果,返回一个map ,其中 key 为权限名称,value 为是否权限是否赋予
}.launch(permissions)
配合 Kotlin 扩展函数进行封装
配合 Kotlin 的扩展函数,我们可以将权限请求的逻辑进行封装。
开发过程中,我们申请权限时关注的就是权限是否申
使用Activity Result API与Kotlin扩展封装权限请求库

本文介绍了在Android中,随着requestPermissions()和onRequestPermissionsResult()被弃用,如何利用Activity Result API进行权限请求。通过示例展示了如何使用新API进行单一和多权限请求,并提供Kotlin扩展函数进行封装,简化权限管理。同时提供了项目的演示地址和作者的其他技术资源链接。
最低0.47元/天 解锁文章
79

被折叠的 条评论
为什么被折叠?



