美文网首页Android
Android 6.0 动态权限申请

Android 6.0 动态权限申请

作者: MartinDong | 来源:发表于2017-07-21 16:17 被阅读106次

    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 
           }
       }
      
       
       @Override
       public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
           super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      
           // Forward results to EasyPermissions
           EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
       }
      
      
       @Override
       public void onPermissionsDenied(int requestCode, List<String> perms) {
           if (EasyPermissions.somePermissionPermanentlyDenied(this,perms)){
               new AppSettingsDialog.Builder(this).build().show();
           }
      
       }
      
       //如果选择了,取消权限,再次检查时会进入onActivityResult
       @Override
       protected 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;
               }
                  
           }

    相关文章

      网友评论

        本文标题:Android 6.0 动态权限申请

        本文链接:https://www.haomeiwen.com/subject/xhyekxtx.html