程序运行过程中会遇到权限需求问题,这时就会需要权限。
一般的,
<uses-permission android:name="android.permission.INTERNET" />
但正常情况下这些权限是禁止的,因此需要请求用户打开权限。
1. 拨打电话的方法
private void call() {
try {
//构建了隐式Intent,Intent的action为Intent.ACTION_CALL
Intent intent = new Intent(Intent.ACTION_CALL);
//data指定了协议是tel
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
} catch (SecurityException ex) {
ex.printStackTrace();
}
}
2. 请求权限
//判断用户是否授权,借助ContextCompat.checkSelfPermisseion()方法
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) !=
PackageManager.PERMISSION_GRANTED) {
//没有授权则申请授权
/*
* 参数一为activity实例
* 参数二为一个String数组,将要授权的权限名写到数组中
* 参数三为请求码,唯一即可*/
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
call();
}
3. 权限请求结果
调用完requestPermissions()后,无论结果如何,都会回调到onRequestPermissionResult()方法中。
//最终都会回调这个方法
public void onRequestPermissionResult(int requestCode,String[] permissions,int[] grantResults){
//结果在grantResults中
switch(requestCode){
case 1:
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
call();
}else{
Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
以上就是关于权限申请的内容。
网友评论