钱柜娱乐开户6.0以上权限管理问题(权限被拒绝后)

原创 2017年04月13日 17:02:24

          写之前,先发个牢骚,特么天天加班,感觉身体被掏空了........................

         -------------------------------------------------------------------------------------------------------------------------

          回到正题,对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装(比如是个app都要访问通讯录、短信,SD卡,相机等)。而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝(比如:获取短信,SD卡,我一般都是拒绝的)。当然你也可以在设置界面对每个app的权限进行查看,以及对单个权限进行授权或者解除授权。钱柜娱乐开户6.0添加了运行时权限,用户可以在已安装的app上立刻同意或者拒绝权限,那么就意味着我们在使用APP的时候,当一个app会使用一些危险权限的时候就会提示用户是否授权.新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。

那么这个权限机制对于用户来说是挺好的,但是对于我们开发人员来讲,却又多了一种适配-权限适配.

就拿申请访问SD卡来说吧,如果用户在第一次弹出授权申请的时候,用户选择了拒绝并不再提示,那么我们访问SD卡的路径就会出错.那么怎么去避免出错呢.

我的解决思路是,先判断权限,再去决定是否响应事件.然后根据回调函数判断是否授权.未授权弹出dialog提示用户去开启权限.

判断当前版本是否为6.0及以上(在清单文件中已经申请权限了)

 if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {
                   ActivityCompat.requestPermissions(this,
                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                            PermissionsUtils.REQUEST_EXTERNAL_STORAGE);
               }else {
                    //正常响应事件
               }
回调函数

@Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);

            switch (requestCode){
                case PermissionsUtils.REQUEST_EXTERNAL_STORAGE:

                    if(grantResults.length>0 && grantResults[0]== PackageManager.PERMISSION_GRANTED){
                        //已获取权限
                  
                        //响应事件
                    }else{
                        //权限被拒绝
                       
                        new SimpleBaseDialog(this, "需要开启权限后才能使用", "去设置", "取消", new SimpleClickListener() {
                        @Override
                        public void ok() {
                            Intent intent=CMethod.getAppDetailSettingIntent(PulishWriteActivity.this);
                            startActivity(intent);
                        }
                        @Override
                        public void cancle() {

                        }
                    }).show();
                    }

                    break;
           }    
 /**
     * 获取应用详情页面intent
     *
     * @return
     */
    public static Intent getAppDetailSettingIntent(Context context) {
        Intent localIntent = new Intent();
        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT >= 9) {
            localIntent.setAction("钱柜娱乐开户.settings.APPLICATION_DETAILS_SETTINGS");
            localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
        } else if (Build.VERSION.SDK_INT <= 8) {
            localIntent.setAction(Intent.ACTION_VIEW);
            localIntent.setClassName("com.钱柜娱乐开户.settings", "com.钱柜娱乐开户.settings.InstalledAppDetails");
            localIntent.putExtra("com.钱柜娱乐开户.settings.ApplicationPkgName", context.getPackageName());
        }
        return localIntent;
    }
最后附上一个工具类

public class PermissionUtils {

    public static final int MY_PERMISSIONS_REQUEST_CODE=10001;

    public static boolean checkAudioPermission(Context context){  //检查麦克风权限 ,写入文件,读出文件权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO)
                != PackageManager.PERMISSION_GRANTED) {
            //申请RECORD_AUDIO  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //申请RECORD_AUDIO  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //申请RECORD_AUDIO  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            //权限已经允许   请执行下一步操作
//            Toast.makeText(context,"Permission Granted",Toast.LENGTH_LONG).show();
            return true;
        }
        return false;
    }

    public static boolean checkCameraPermission(Context context){  //检查拍照权限 ,写入文件,读出文件权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
            //CAMERA  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //CAMERA  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //CAMERA  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            return true;
        }
        return false;
    }

    public static boolean checkCameraScanPermission(Context context){  //检查拍照权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {
            //CAMERA 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            return true;
        }
        return false;
    }

    public static boolean checkExternalStoragePermission(Context context){  //检查写入文件,读出文件权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //CAMERA  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //CAMERA  WRITE_EXTERNAL_STORAGE  READ_EXTERNAL_STORAGE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            return true;
        }
        return false;
    }

    public static boolean checkLocationPermission(Context context){  //检查获取位置权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            //ACCESS_COARSE_LOCATION  ACCESS_FINE_LOCATION 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            //ACCESS_COARSE_LOCATION  ACCESS_FINE_LOCATION 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            //权限已经允许   请执行下一步操作
//            Toast.makeText(context,"Permission Granted",Toast.LENGTH_LONG).show();
            return true;
        }
        return false;
    }

    public static boolean checkContactsPermission(Context context){  //检查获取联系人权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            //READ_CONTACTS  GET_ACCOUNTS 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_CONTACTS},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED){
            return true;
        }
        return false;
    }

    public static boolean checkSendSMSPermission(Context context){  //检查获取发短信权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            //SEND_SMS 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.SEND_SMS},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            //权限已经允许   请执行下一步操作
//            Toast.makeText(context,"Permission Granted",Toast.LENGTH_LONG).show();
            return true;
        }
        return false;
    }

    public static boolean checkPhonePermission(Context context){  //检查获取电话权限
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            //READ_PHONE_STATE  CALL_PHONE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_PHONE_STATE,Manifest.permission.CALL_PHONE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else if (ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED) {
            //READ_PHONE_STATE  CALL_PHONE 权限
            ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_PHONE_STATE,Manifest.permission.CALL_PHONE},
                    MY_PERMISSIONS_REQUEST_CODE);
        }else{
            //权限已经允许   请执行下一步操作
//            Toast.makeText(context,"Permission Granted",Toast.LENGTH_LONG).show();
            return true;
        }
        return false;
    }}

that's all THX











                    
版权声明:本文为博主原创文章,未经博主允许不得转载。

钱柜娱乐开户运行时权限解决办法(含有申请权限已授权、权限被拒绝、权限勾选不在提示的回调)

先说明一下: 1、钱柜娱乐开户运行时权限已经不是新东西了,我始终没在工程中实现。(因为有个方法,就是把targetSdkVersion控制在23 钱柜娱乐开户 6.0以下,系统为了兼容老客户端...
  • u010823943
  • u010823943
  • 2017年02月24日 23:11
  • 5192

在钱柜娱乐开户 M中权限被拒绝时该如何处理

钱柜娱乐开户 M Preview 2 的SDK中引入了一个方法来处理运行时权限:Activity.shouldShowRequestPermissionRationale()。 这个函数的作用...
  • lebsharing
  • lebsharing
  • 2016年07月11日 17:58
  • 910

钱柜娱乐开户 请求权限被拒处理方法(使用于6.0以下系统)

**钱柜娱乐开户 请求权限被拒处理方法(使用于6.0以下系统)** 最近处理BUG,发现部分手机拒绝我拍照的请求权限之后,程序会崩溃。由于钱柜娱乐开户系统在6.0以下是没有动态权限管理的,只有在M...
  • qq_29967217
  • qq_29967217
  • 2016年06月13日 19:53
  • 4164

钱柜娱乐开户6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

钱柜娱乐开户 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX...
  • u011200604
  • u011200604
  • 2016年10月20日 16:54
  • 22063

钱柜娱乐开户6.0运行时权限,拒绝了权限还返回获取成功

如题: 推荐一个很好的项目:AndPermission 不用回来感谢了喂!这个问题在项目中,一直存在, 主要是第三方厂商各种改,返回的状态不正常; 主要解决思路: 在第三方成功获取权限时, ...
  • azhansy
  • azhansy
  • 2017年07月01日 18:11
  • 638

钱柜娱乐开户6.0用户拒绝权限后下次在申请

  • 2017年12月01日 18:33
  • 21.5MB
  • 下载

钱柜娱乐开户6.0动态权限申请步骤以及需要注意的一些坑

转载于:http://www.jianshu.com/p/a51593817825 因为工作需要,简单研究了一下钱柜娱乐开户6.0权限申请,在Google提供的sample的基础上,写了一个简单的...
  • nnmmbb
  • nnmmbb
  • 2016年12月17日 14:10
  • 3218

安卓钱柜娱乐开户6.0权限管理,支持同时管理多个权限,权限被拒绝后的处理,并可在设置中进行更改权限

  • 2017年04月26日 16:09
  • 19.52MB
  • 下载

钱柜娱乐开户6.0开发中遇到的权限坑

钱柜娱乐开户的权限在23以下的版本中自动授权,而这个版本及以上需要用户手动授权。这对用户隐私来说当然有好处,比如我不想app获取我的位置。对开发来说,虽然麻烦是避免不了了,但是也不是很蛋疼。 对于...
  • little_shengsheng
  • little_shengsheng
  • 2016年10月28日 15:59
  • 939

钱柜娱乐开户6.0新的授权方式和PermissionM的使用

关于钱柜娱乐开户 M(6.0)新的授权方式 只有我们设置app的targetSdkVersion为23,并且app运行在6.0之后的设备才使用新的权限系统。 在钱柜娱乐开户6.0,app不会在安装...
  • woaichichengzia
  • woaichichengzia
  • 2016年07月21日 16:10
  • 2134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:钱柜娱乐开户6.0以上权限管理问题(权限被拒绝后)
举报原因:
原因补充:

(最多只允许输入30个字)