Android6.0 添加了权限的机制,需要用户给予一些危险的权限。比如:访问SD卡,拨打电话等。我们怎样对权限进行处理呢?
权限机制的处理的逻辑
对于Android的权限处理,有三个核心的方法: 1、ContextCompat.checkSelfPermission:用于检测是否拥有权限。 2、ActivityCompat.requestPermissions:请求该权限。 3、onRequestPermissionsResult:获取权限请求的回调。
一段打电话的代码来展示主要的逻辑:
public class CallPermissionActivity extends AppCompatActivity {
public final static int PERMISSION_CALL = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.call);
}
public void call(View view){
call();
}
private void call(){
//1、判断是否有打电话的权限
if(ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
//没有获取权限则做权限处理
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},PERMISSION_CALL);
} else {
//已经获取了权限,则执行打电话操作
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+100010));
startActivity(intent);
}
}
//权限请求回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case PERMISSION_CALL:
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
call();
}else{
//用户没有授予权限,
}
break;
}
}
}
代码的逻辑比较简单,先checkSelfPermission检查是否授权,如果没有授权则请求权限requestPermissions,然后将请求权限结构回调在onRequestPermissionsResult中。
推荐博客: http://blog.csdn.net/yanzhenjie1003/article/details/52503533/