在我们使用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:这篇文章主要借鉴郭神的《第一行代码》,感觉不够详细的可以去看一下。