Android中动态申请权限及其结果回调

Android中对权限的管理越来越严格,如果在开发中自己处理权限,那么将是一件很麻烦的事情,开发中我们可以不重复造轮子,但是学习一下基础的API还是很有必要的

申请权限一般有两种方式

Activity中申请权限

 String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
 int requestCode = 100;
ActivityCompat.requestPermissions(MainActivity.this, permissions,requestCode);

用这种方式申请权限,那么将在对应的Activity中获取到回调结果

//Activity自有的方法
   @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 
    }

很多时候我们还需要在Fragment中申请权限,那么这个时候怎么获取回调结果呢?

Fragment中申请权限

一、使用Fragment自身的方法
Fragment其实自身是有申请权限的方法的

 String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
 int requestCode = 100;
//直接在fragment中使用这行代码就行
requestPermissions(permissions,requestCode);

而且,Fragment自身也有权限回调的方法

//fragment自身携带的权限回调的方法,名称与Activity中的一致
  @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
     
    }

需要说明的是:
通过这种方式在Fragment中申请权限,那么回调的执行顺序其实是:

Activity.onRequestPermissionsResult()
--->Fragment.onRequestPermissionsResult()

Activity是Fragment所依附的Activity,Fragment就是当前申请权限的Fragment
也就是说,使用Fragment申请权限的方法申请权限,Fragment所依附的Activity的权限回调也会执行,并且执行顺序优先于Fragment
这个方法推荐在Fragment中使用

二、使用ActivityCompat类
ActivityCompat类提供的申请权限的方法是静态方法,那么也就意味着我们依然可以在Fragment中使用ActivityCompat.requestPermissions(MainActivity.this, permissions,requestCode);来申请权限,这个方法的使用及其回调在本篇中已经说过了。
在这里需要说明的是,如果我们使用这个方法在Fragment中申请权限,那么我们的Fragment自身携带的权限回调的方法是不执行的。
这样我们就无法直接在Fragment中获取到结果,不推荐在Fragment中使用

你可能感兴趣的:(Android中动态申请权限及其结果回调)