Android 6.0 动态权限申请

来源:互联网 发布:山寨币 冷钱包源码 编辑:程序博客网 时间:2024/06/07 06:50

Android 动态权限

从 Android 6.0 (API 23)开始使用动态的权限及(targetSdkVersion >=23 就需要动态的申请权限),使得系统更加安全,用户的信息也得到了更好的保护。

在android 6.0 中权限被分为两种:
1. Normal Permissions (正常权限)
2. Dangerous Permissions(危险权限)

其中危险权限又进行了分类,把所有的危险权限分为了九组。正常的权限是不需要动态的申请的,只有危险权限才需要动态的申请。

所有的危险权限:

权限组 权限 CALENDAR 日历 CAMERA 相机 CONTACTS 联系人 LOCATION 定位 MICROPHONE 麦克,录音 PHONE 手机状态 SENSORS 传感器 SMS 短信 STORAGE 存储权限

Anroid 6.0 中权限问题中需要注意的两点
1. 由于权限API问题,我们的 Activity 最好是 AppCompatActivity 类型的,也就是说在你的 BaseActivity 需要继承 AppCompatActivity。
2. 权限是分组的,同一组的权限申请其中一个,同组的权限就全部都申请了。当然,不论是正常权限还是危险权限都必须在应用的 Manifest.xml 中声明。

 使用开源的 EasyPermissions 进行动态的申请

easypermission.png

GitHub 地址: EasyPermissions 这个项目是GoogleSamples

  1. 配置
    在 app 层的 build.gradle 中

    dependencies {    compile 'pub.devrel:easypermissions:0.4.2'} 
  2. 使用
    举栗子
    在Activity(Fragment)中都可以使用

    private void checkPermissions() {    //每一次在需要使用到权限的时候都要进行检查权限是否开启,虽然之前是开启的,但是用户有可能关闭权限    //这里是需要申请的权限    String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};    if(EasyPermissions.hasPermissions(this,perms)){        //权限已经申请完成,执行任务        choosePhoto();    }else{        EasyPermissions.requestPermissions(this,"需要访问你的相册",RC_WRITE_READ_EXTERNAL_STORAGE,perms); //RC_WRITE_READ_EXTERNAL_STORAGE 是requestCode     }}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    // Forward results to EasyPermissions    EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) {    if (EasyPermissions.somePermissionPermanentlyDenied(this,perms)){        new AppSettingsDialog.Builder(this).build().show();    }}//如果选择了,取消权限,再次检查时会进入onActivityResult@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    switch (requestCode){         case AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE:                Toast.makeText(this,"您需要开启访问相册的权限才能选择图片,请进入设置中开启访问权限",Toast.LENGTH_SHORT).show();                break;        }    }

至此,已经可以进行动态的权限申请了。
转载请标明 MartinDung http://blog.csdn.net/qq_30321715/article/details/78132367 谢谢。