权限申请:Android 6.0 (API23)开始引入了权限申请机制,将所有权限分成了正常权限和危险权限
一、Manifest(清单文件)添加权限(打电话)
< uses-permission android:name=“android.permission.CALL_PHONE” />
二、判断系统是否大于等于6.0
if(Build.VERSION.SDK_INT>=23){
//动态申请权限
}else {
//直接打
call();
}
三、如果大于等于6.0 则进行权限检查和申请
检查是否拥有打电话的权限
//判断是否有权限 第一个参数 上下文 第二个参数具体的权限 有权限返回0 没权限返回1
int i = ContextCompat.checkSelfPermission(HomeActivity.this, Manifest.permission.CALL_PHONE);
权限存在打电话不存在动态申请权限
if(i == PackageManager.PERMISSION_GRANTED){
call();
}else {
ActivityCompat.requestPermissions(HomeActivity.this,new String[]{Manifest.permission.CALL_PHONE},PERMISSION_CODE);
}
四、权限回调 重写onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == PERMISSION_CODE){
//首先确定这个权限是我申请的 然后判断有申请内容 和 具体权限
if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
call();
}else {
Toast.makeText(HomeActivity.this,"没权限打不了",Toast.LENGTH_SHORT).show();
}
}
}
完整权限申请
if(Build.VERSION.SDK_INT>=23){
//动态申请权限
//判断是否有权限 第一个参数 上下文 第二个参数具体的权限
int i = ContextCompat.checkSelfPermission(HomeActivity.this, Manifest.permission.CALL_PHONE);
//如果返回结果为0 则权限已经拥有
if(i == PackageManager.PERMISSION_GRANTED){
call();
}else {
ActivityCompat.requestPermissions(HomeActivity.this,new String[]{Manifest.permission.CALL_PHONE},PERMISSION_CODE);
}
}else {
//直接打
call();
}
打电话方法
private void call(){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:123456"));
startActivity(intent);
}
常用许可