预备知识
-
ActivityCompat类 Google提供的一个帮助类,用来兼容不同Sdk版本的Activity特性,同时提供了一些生命周期拦截的能力
-
ActivityCompat.PermissionCompatDelegate类 提供requestPermissions和onActivityResult的全局拦截能力
技术目标
- 在能拿到Activity context的地方(自定义View、Dialog、PopWindow),可以方便直接地获取到onActivityResult结果
- 使用时应严格与宿主Activity生命周期绑定,当宿主Activity销毁后,释放callback实例
- 要完全兼容三方库或者系统库的正常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源码
源码地址 如果有问题,欢迎大家一起交流改进!