使用Android Studio编程程序运行时权限的申请

在我们使用app的时,大多时候因为某些功能的需求,需要获得一些权限,比如当我们使用qq进行视频聊天的时候,我们需要获得摄像头的权限,
因此在本文中,我会大体的介绍一些权限的申请是如何操作的。

运行时权限的申请:
首先需要在AndroidManifest.xml文件中申请权限,如:

若是普通权限,则权限的申请已经完成,若是危险权限,则还必须进行运行时权限处理。通过if语句判断用户是否
已经给过权限,通过ContextCompat.checkSelfPermission()方法,ContextCompat.checkSelfPermission()方法有两个
参数:第一个参数为Context类,这里传入MainActivity.this,第二个参数为具体的权限名,传入Manifest.permission.CALL_PHONE。
通过这个方法的返回值与PackageManager.PERMISSION_GRANTED做比较,如果相等就说明用户已授权,反之未授权。若未
授权,则需要调用ActivityCompat.requestPermissions()方法向用户申请授权。该方法有3个参数:第一个参数为Activity的实例,
第二个参数为一个String数组,把所要申请的权限名称放入该数组即可,第三个参数是请求码,只要为唯一值就可以,这里传入1。
调用完ActivityCompat.requestPermission()方法之后,会回调到onRequsetPermission()方法中,而授权的结构则会封装在
grantResults参数当中,这时只要我们对grantResults参数进行判断即可。
代码如下:

if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=
PackageManager.PERSSION_GRANTED){
    ActivityCompat.requestPermissions(MainActiviy.this,String[]{Manifest.permission.CALL_PHONE},1);
    }else{
        //逻辑操作
        }



@Overside
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){

    switch(requestCode){
        case 1:
            if(grantResult.length>0&&grantResult[0]==PackageManager.PERSSION_CRANTED){
            //逻辑操作
            }else{
                //提醒用户拒绝授权
                }
            break;
        default:
    }

}

注:onRequestPermissionsResult()方法是定义在oncreate()外的。
Ps:这篇文章主要借鉴郭神的《第一行代码》,感觉不够详细的可以去看一下。