Skip to content

v26.0

Choose a tag to compare

@getActivity getActivity released this 10 Aug 08:39
· 32 commits to master since this release
  1. 适配 Android 16 相关的权限:当项目 targetSdk >= 36 时,将无法使用传感器权限获取心率相关的数据,因为传感器权限已经被拆分成了 95 个权限,大致可以分为以下几类:

    • 健身和健康数据权限:运动、心率、体重、身高、体温、体脂等等数据权限。

    • 健康记录权限:过敏、医疗记录、医师信息、就医情况等等数据权限。

    • 后台读取健康数据权限:作用约等于后台传感器权限,能够在后台读取数据。

    • 读取以往的健康数据权限:HealthConnect 可以读取授予权限前最多 30 天的数据,如果应用要读取 30 天之前的记录,需要申请此权限。

  2. 重构权限回调的代码设计:之前的版本中,权限申请成功会回调会调用 onGranted 方法,权限失败会回调 onDenied 方法,这种设计看似很合理,但是存在一个问题,如果同时申请了多种权限并且用户并不是全部授予的情况下,使用者怎么知道哪些权限是授予哪些权限是拒绝的?框架的处理方式是先调用 onDenied 方法,再调用 onGranted 方法,在 onGranted 方法可以通过 allGranted 布尔参数来判断是否全部授予,这样的设计虽然可以解决需求,但是这种做法并不是最佳的解法,存在一定的瑕疵,需要使用者牢记框架会同时调用 onGrantedonDenied 方法的情况,另外如果使用者要在权限申请后(无论成功还是失败)做统一的处理,就需要在 onGrantedonDenied 这两个方法做写代码,这样就会导致代码重复的问题,经过深思熟虑,决定换一种新的写法,其设计的思想是干掉权限回调方法中区分成功和失败的概念,直接给权限回调完成的方法,并且附带已授予的权限和已拒绝的权限,具体改动区别如下:

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;
            }
            ......
        }
    });
  1. 其他内容更新:

    • 优化部分厂商上面返回的权限页面的类型:涉及到的厂商有华为、荣耀、OPPO,想要达到的效果是:如果申请的权限授权页是透明的,就用 PopupWindow 来展示权限说明,如果申请的权限授权页是不透明的,就用 Dialog 来展示权限说明。

    • 补充部分权限的错误检查机制:涉及到的权限有通知栏监听权限、设备管理器权限、无障碍服务权限、VPN 权限,更加严格的错误检测机制可以帮助开发者快速发现问题的原因,而不是因为排查一个小问题耗费半天时间。

    • 删除撤销权限方法:因为这种方法根本没有人会调用,所以直接从框架中移除掉。