v26.0
-
适配 Android 16 相关的权限:当项目 targetSdk >= 36 时,将无法使用传感器权限获取心率相关的数据,因为传感器权限已经被拆分成了 95 个权限,大致可以分为以下几类:
-
健身和健康数据权限:运动、心率、体重、身高、体温、体脂等等数据权限。
-
健康记录权限:过敏、医疗记录、医师信息、就医情况等等数据权限。
-
后台读取健康数据权限:作用约等于后台传感器权限,能够在后台读取数据。
-
读取以往的健康数据权限:
HealthConnect可以读取授予权限前最多 30 天的数据,如果应用要读取 30 天之前的记录,需要申请此权限。
-
-
重构权限回调的代码设计:之前的版本中,权限申请成功会回调会调用
onGranted方法,权限失败会回调onDenied方法,这种设计看似很合理,但是存在一个问题,如果同时申请了多种权限并且用户并不是全部授予的情况下,使用者怎么知道哪些权限是授予哪些权限是拒绝的?框架的处理方式是先调用onDenied方法,再调用onGranted方法,在onGranted方法可以通过allGranted布尔参数来判断是否全部授予,这样的设计虽然可以解决需求,但是这种做法并不是最佳的解法,存在一定的瑕疵,需要使用者牢记框架会同时调用onGranted和onDenied方法的情况,另外如果使用者要在权限申请后(无论成功还是失败)做统一的处理,就需要在onGranted和onDenied这两个方法做写代码,这样就会导致代码重复的问题,经过深思熟虑,决定换一种新的写法,其设计的思想是干掉权限回调方法中区分成功和失败的概念,直接给权限回调完成的方法,并且附带已授予的权限和已拒绝的权限,具体改动区别如下:
XXPermissions.with(this)
.permission(PermissionLists.getRecordAudioPermission())
.permission(PermissionLists.getCameraPermission())
.request(new OnPermissionCallback() {
@Override
public void onGranted(@NonNull List<IPermission> permissions, boolean allGranted) {
......
}
@Override
public void onDenied(@NonNull List<IPermission> permissions, boolean doNotAskAgain) {
......
}
});XXPermissions.with(this)
.permission(PermissionLists.getRecordAudioPermission())
.permission(PermissionLists.getCameraPermission())
.request(new OnPermissionCallback() {
@Override
public void onResult(@NonNull List<IPermission> grantedList, @NonNull List<IPermission> deniedList) {
boolean allGranted = deniedList.isEmpty();
if (!allGranted) {
boolean doNotAskAgain = XXPermissions.isDoNotAskAgainPermissions(activity, deniedList);
......
return;
}
......
}
});-
其他内容更新:
-
优化部分厂商上面返回的权限页面的类型:涉及到的厂商有华为、荣耀、OPPO,想要达到的效果是:如果申请的权限授权页是透明的,就用 PopupWindow 来展示权限说明,如果申请的权限授权页是不透明的,就用 Dialog 来展示权限说明。
-
补充部分权限的错误检查机制:涉及到的权限有通知栏监听权限、设备管理器权限、无障碍服务权限、VPN 权限,更加严格的错误检测机制可以帮助开发者快速发现问题的原因,而不是因为排查一个小问题耗费半天时间。
-
删除撤销权限方法:因为这种方法根本没有人会调用,所以直接从框架中移除掉。
-