Android 6.0运行时权限

运行时权限简述

Android 6.0新增了运行时权限,导致部分权限即需要在AndroidMenifest中声明,也需要运行时进行权限申请,以下就是需要进行动态申请的权限。

  • CALENDAR(日历)
    • READ_CALENDAR
    • WRITE_CALENDAR
  • CAMERA(相机)
    • CAMERA
  • CONTACTS(联系人)
    • READ_CONTACTS
    • WRITE_CONTACTS
    • GET_ACCOUNTS
  • LOCATION(位置)
    • ACCESS_FINE_LOCATION
    • ACCESS_COARSE_LOCATION
  • MICROPHONE(麦克风)
    • RECORD_AUDIO
  • PHONE(手机)
    • READ_PHONE_STATE
    • CALL_PHONE
    • READ_CALL_LOG
    • WRITE_CALL_LOG
    • ADD_VOICEMAIL
    • USE_SIP
    • PROCESS_OUTGOING_CALLS
  • SENSORS(传感器)
    • BODY_SENSORS
    • SMS(短信)
    • SEND_SMS
    • RECEIVE_SMS
    • READ_SMS
    • RECEIVE_WAP_PUSH
    • RECEIVE_MMS
  • STORAGE(存储卡)
    • READ_EXTERNAL_STORAGE
    • WRITE_EXTERNAL_STORAGE* CALENDAR(日历)
在什么条件下我们需要处理运行时权限?

APP运行在Android 6.0或者更高级别的设备中,而且targetSdkVersion>=23时。

处理时需要注意什么?
  1. 必须在AndroidManifest.xml中进行申明。
  2. 同一种类型权限被授权了,那么这个类型的其他权限也被授权了。比如只要日历权限的读或写其中一个被动态授权,那么日历的读写权限都同时被动态授权了。
  3. 申请某个权限时弹出的Dialog是对同类权限总的说明。
  4. Activity必须继承AppCompatActivity
怎么进行处理?

下方代码会先判断是否是6.0及以后版本,如果是的话,通过方法checkSelfPermission()进行权限检查,如果没有权限,则通过requestPermissions()进行申请权限。申请权限完成后,requestPermissions()内部会调用onRequestPermissionsResult()进行结果回调通知当前Activity或Fragment。
注意 :checkSelfPermission()调用后系统会显示一个请求用户授权的提示对话框,App不能配置和修改这个对话框。


    private void requestPermissions() {
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         int checkCallPhonePermission = ContextCompat.checkSelfPermission(
                                              BaseApplication.getContext(),
                                              Manifest.permission.READ_EXTERNAL_STORAGE);

            //是否有权限
            if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
               LogTool.d(TAG, "requestPermissions");
               //是否是拒绝过一次权限申请。
               if(ActivityCompat.shouldShowRequestPermissionRationale(this,
                                           Manifest.permission.READ_EXTERNAL_STORAGE)){
                    LogTool.d(TAG,"user reject this permissions");

                    return;
                }else { //申请权限
                    LogTool.d(TAG, "requestPermissions");
                    ActivityCompat.requestPermissions(this, new String[]{
                                          Manifest.permission.READ_EXTERNAL_STORAGE,
                                          Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                          REQUEST_PERMISSIONS_REQUEST_CODE);
                    return;
                }

                return;
            }
        }

        LogTool.d(TAG, "Already have permissions");
    }

这个是结果回调,根据用户是否给予权限做出相关事情。

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSIONS_REQUEST_CODE) {
            int grantResult = grantResults[0];
            //doSomething
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值