Android6.0运行时权限处理

1.Dangerous Permissions

9组25个权限:申请组中任意一个权限对应组中的其他权限都默认被系统授权了(在次申请的时候)。

对于申请权限弹出的Dialog,是不能定制的。

group:android.permission-group.CONTACTS
  permission:android.permission.WRITE_CONTACTS
  permission:android.permission.GET_ACCOUNTS
  permission:android.permission.READ_CONTACTS

group:android.permission-group.PHONE
  permission:android.permission.READ_CALL_LOG
  permission:android.permission.READ_PHONE_STATE
  permission:android.permission.CALL_PHONE
  permission:android.permission.WRITE_CALL_LOG
  permission:android.permission.USE_SIP
  permission:android.permission.PROCESS_OUTGOING_CALLS
  permission:com.android.voicemail.permission.ADD_VOICEMAIL

group:android.permission-group.CALENDAR
  permission:android.permission.READ_CALENDAR
  permission:android.permission.WRITE_CALENDAR

group:android.permission-group.CAMERA
  permission:android.permission.CAMERA

group:android.permission-group.SENSORS
  permission:android.permission.BODY_SENSORS

group:android.permission-group.LOCATION
  permission:android.permission.ACCESS_FINE_LOCATION
  permission:android.permission.ACCESS_COARSE_LOCATION

group:android.permission-group.STORAGE
  permission:android.permission.READ_EXTERNAL_STORAGE
  permission:android.permission.WRITE_EXTERNAL_STORAGE

group:android.permission-group.MICROPHONE
  permission:android.permission.RECORD_AUDIO

group:android.permission-group.SMS
  permission:android.permission.READ_SMS
  permission:android.permission.RECEIVE_WAP_PUSH
  permission:android.permission.RECEIVE_MMS
  permission:android.permission.RECEIVE_SMS
  permission:android.permission.SEND_SMS
  permission:android.permission.READ_CELL_BROADCASTS

2. 6.0 代码动态申请

//1.在配置文件中 去声明要申请的权限,去申请没有声明的权限会造成程序崩溃
//2. 去检查是否申请权限了,申请了去执行业务逻辑,没有申请去申请,在回调中进行权限的再次判断与逻辑处理
//3. ContextCompat.checkSelfPermission()返回值有两个 PackageManager.PERMISSION_GRANTED(允许了) 和 PackageManager.PERMISSION_DENIED(拒绝了)
//权限没有申请,就去申请权限去
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.CALL_PHONE)) {
        // 当用户第一次拒绝了,这个分支在下次申请权限的时候,可以弹个dialog来提醒用户。
        Toast.makeText(MainActivity.this,"申请吧,不要拒绝了!",Toast.LENGTH_SHORT).show();
    } else {
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PERMISSION_REQUEST_CODE);
    }
} else {
    //权限申请了,就去执行业务逻辑吧
    callPhone();
}
                
/**
     * 打电话
     */
    public void callPhone() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + "13478493231"));
        startActivity(intent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        //检查请求码,找到了对应申请权限的请求码 再去判断
        switch (requestCode) {
            case CALL_PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    callPhone();
                } else {
                    Toast.makeText(MainActivity.this, "权限被拒绝了,就不能正常使用该应用了", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }

猜你喜欢

转载自blog.csdn.net/dashingqi/article/details/80981090