权限
普通权限:不会直接威胁到用户的安全与隐私
危险权限:可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人信息、定位设备的地理位置等,用户必须手动授权
Android中所有危险权限:
如果是属于这张表中的权限,就需要进行运行时权限处理;
如果不在表中,只需要在AndroidManifest中添加权限声明。
表格中每个危险权限都属于一个权限组,我们在进行运行时权限处理时使用的是权限名,但是用户一旦同一授权,那么该权限所对应的权限组中所有的其他权限也会同时被授权。
运行时申请权限
case R.id.main_btn_call:
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
//调用完requestPermissions()方法后,不管用户同意还是拒绝权限申请,
//都会回调到onRequestPermissionResult()
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},1);
}else {
call();
}
break;
@SuppressLint("MissingPermission")
private void call(){
try {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] 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;
}
}