Android 6.0权限适配

  • 新增API
    • ContextCompat.checkSelfPermission 检测当前app是否拥有某些权限
    • ActivityCompat.requestPermissions() 申请某些权限
    • onRequestPermissionResult回调权限申请结果
    • ActivityCompat.shouldShowRequestPermissionRetional向用户解释权限的作用
  • 使用流程
    • 在AndroidManifest中添加需要的权限(不能省略,因为还需要适配6.0以下的系统)
    • 检查权限(危险权限,跟用户相关的),一般权限只在清单文件中申请即可
    • 申请授权
    • 处理申请回调
    • (注:如果不想急于适配6.0权限,gradle中targetSdkVersion使用小于23的即可,minSdkVersion和targetSdkVersion会被包含进打包生成的apk中)
  • 6.0权限组
    • 这里写图片描述
  • 权限使用的封装 (一般我们的Activity都会继承BaseActivity,然后在里面写一些公共的处理代码,那么我们就可以将其封装在BaseActivity中)
    /**
     * 为子类提供一个权限检查方法
     * @param permissions 所要检查的权限
     * @return
     */
    public boolean hasPermission(String... permissions){
        for (String permission : permissions){
            if(ContextCompat.checkSelfPermission(this,permission)
                    != PackageManager.PERMISSION_GRANTED){
                return false;
            }
        }
        return true;
    }

    /**
     * 为子类提供一个权限请求方法
     * @param code 请求码
     * @param permissions 所要请求的权限
     */
    public void requestPermission(int code,String...permissions){
        ActivityCompat.requestPermissions(this,permissions,code);
    }

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode){
            //根据requestCode做相应处理,可以在项目的常量类中声明一些requestCode,
            //在本类中可以提供默认的处理方法,如果子类想分别处理,
            // 只需要重写父类的方法即可,毕竟权限组并没有几个
        }
    }

注:该文章是参考了慕课网的《Android 6.0系统新特性》写的

猜你喜欢

转载自blog.csdn.net/qq_33666539/article/details/52661724