Android小妙招之ActivityCompat.PermissionCompatDelegate

1,509 阅读1分钟

预备知识

  1. ActivityCompat类 Google提供的一个帮助类,用来兼容不同Sdk版本的Activity特性,同时提供了一些生命周期拦截的能力

  2. ActivityCompat.PermissionCompatDelegate类 提供requestPermissions和onActivityResult的全局拦截能力

技术目标

  1. 在能拿到Activity context的地方(自定义View、Dialog、PopWindow),可以方便直接地获取到onActivityResult结果
  2. 使用时应严格与宿主Activity生命周期绑定,当宿主Activity销毁后,释放callback实例
  3. 要完全兼容三方库或者系统库的正常PermissionCompatDelegate的Api调用

整体设计

使用方式

GlobalPermissionCompatDelegate.getInstance().register(activityContext, new ActivityCompat.PermissionCompatDelegate() {
    @Override
    public boolean requestPermissions(@NonNull Activity activity, @NonNull String[] permissions, int requestCode) {
        // your business code
        return false;
    }

    @Override
    public boolean onActivityResult(@NonNull Activity activity, int requestCode, int resultCode, @Nullable Intent data) {
        // your business code
        return false;
    }
});

关键成果展示

Github源码

源码地址 如果有问题,欢迎大家一起交流改进!