运行程序申请危险权限

Android6.0之后为了增加软件应用程序的安全性,在软件申请有关危险权限的时候,需要在软件运行危险权限的时候需要获取用户赋予权限,以下是九种危险权限,都需要获取用户赋予。

先要判断是否拥有权限,如果没有就向用户申请获取权限,一次同意,终身免过,拒绝一次,下次触发还要坚持不懈继续申请。调用ContextCompat.checkSelfPermission()方法与PackageManager.PERMISSION_GRANTED  相比较,checkSelfPermission(Context,permission)有两个参数,第一个是上下文,第二个就是具体的权限名字。如果没有权限则会调用ActivityCompat的requestpermission(Context,String[],int requestCode),三个参数,第一上下文,第二String组的权限名字,第三一个请求码,我们这里传入1.

  if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED ){
                        ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
                    }else {
                        //执行获取权限之后的操作
                    }

用户无论给我们权限还是不给权限,都会调用onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)方法,而且用户不给权限每次进程序还是会询问给不给权限,不给就失败。然后完成获取权限的操作。然后完成击杀用户,拿下一血。

  @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if (grantResults.length>0 && grantResults[0] == getPackageManager().PERMISSION_GRANTED) {
                    //申请成功的操作
                } else {
                    Toast.makeText(this, "呼叫失败", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                break;
        }
    }

 

原文地址:https://www.cnblogs.com/zhoushenglei/p/7161289.html