v25.0
-
对框架内部进行了重大重构,外层将不能传入权限字符串来申请权限,只能通过权限对象来申请权限,因为所有的权限都被封装成了单独的类,这样做的好处有:
-
提升代码的执行效率:以前的版本传入权限字符串的方式,每次判断权限的状态都要经过很多次
String.equals的判断,才能知道是哪个权限,才会走到对应的代码逻辑中进行判断,执行效率低下,现在换成了权限对象,直接调用权限对象的方法就可以判断权限的状态,省略过程中多次String.equals的代码判断。 -
提升代码的可读性:以前的版本采用的是策略设计模式,当 Android 每发布一个版本,就需要框架多写一个策略类来适配,这样会出现一个问题,这个策略类中会包含多个权限的代码逻辑,又或者某个权限会被多个策略类使用,会导致我们阅读代码的时候十分困难,需要做无数次代码追踪和定位才能看懂框架对于某个权限的代码逻辑,然而现在通过将权限封装成对象,你申请哪个权限,就直接点进去哪个权限类的源码,就可以一目了然地看到所有关于这个权限的代码逻辑,而不需要再东一块源码,西一块源码地去看。
-
提升代码的扩展性:在以前的版本你如果想要申请框架没有支持的权限,只能通过修改框架的源码才能实现,这不仅麻烦、容易出现 Bug,并且代码后续会很难维护,但是在最新版本,你只需要继承特定的类(危险权限请继承
DangerousPermission,特殊权限请继承SpecialPermission),即可以实现自定义一个权限,你再也不需要依赖框架作者才能支持某个权限了,纵使框架停更了,但是 Android 新的版本出了新的权限,只要框架的内核没有问题,也丝毫不会影响你的使用。这个功能非常强大,至于能干什么?就要发挥大家整活的能力了。(开机权限、Android/data目录权限、WIFI 功能开关、蓝牙功能开关、定位功能开关等等,此处请尽情发挥你丰富的想象力!) -
降低代码的耦合度:在以前的版本,你用框架只申请了相机权限,纵使你没有用到其他权限,但是编译的时候仍会保留其他所有权限的代码逻辑,这是因为之前的版本是严重依赖于
String.equals才能知道是哪个权限,代码耦合度很高,现在权限被封装成对象了,再也没有这个问题了,所以在最新版本上,你如果只用到了相机权限,在开启minifyEnabled(代码混淆)选项后,其他无关的权限类都会在编译过程中从包体中完全移除,真正做到开箱即用,用多少算多少。
-
-
新增功能:
-
新增支持全屏通知权限
-
新增支持设备管理器权限
-
新增支持无障碍服务权限
-
新增支持通知权限支持按照
ChannelId最小颗粒度进行申请
-
-
优化及Bug修复:
-
优化框架内部的代码命名和代码注释以协助大家阅读框架源码
-
优化在请求权限时锁定 Activity 屏幕方向的时机
-
优化权限说明弹窗在大屏设备上面的 UI 效果
-
优化危险权限在澎湃或 miui 上面跳转权限设置页的体验
-
优化请求忽略电池优化选项权限跳转权限设置页的逻辑
-
优化特殊权限在极端场景下跳转失败的兜底方案
-
优化后台定位权限在 Android 12 上面的判断和处理
-
修正后台定位权限和后台传感器权限判断是否不再询问的逻辑
-
修正多个权限的目标设置页都一样的情况下但是仍会跳转到通用设置页的问题
-
修正 Maven 插件在生成的 pom 文件没有携带
dependencies信息的问题 -
修正读取媒体文件位置权限类在低版本下的判断是否不再询问的选项
-
改进通知栏监听权限判断是否授予的方式
-
适配在申请多组权限情况下的一些极端场景
-
修复跳转权限设置页在极端场景下失败时会提前触发权限回调的问题
-
兼容在极端情况下调用系统的
requestPermissions方法时会出现崩溃的问题 -
处理在
android.app.Fragment对象中调用权限申请后,开启代码混淆会出现AbstractMethodError问题
-