Android6.0之后为了增加软件应用程序的安全性,在软件申请有关危险权限的时候,需要在软件运行危险权限的时候需要获取用户赋予权限,以下是九种危险权限,都需要获取用户赋予。
先要判断是否拥有权限,如果没有就向用户申请获取权限,一次同意,终身免过,拒绝一次,下次触发还要坚持不懈继续申请。调用ContextCompat.checkSelfPermission()方法与PackageManager.PERMISSION_GRANTED 相比较,checkSelfPermission(Context,permission)有两个参数,第一个是上下文,第二个就是具体的权限名字。如果没有权限则会调用ActivityCompat的requestpermission(Context,String[],int requestCode),三个参数,第一上下文,第二String组的权限名字,第三一个请求码,我们这里传入1.
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED ){ ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1); }else { //执行获取权限之后的操作 }
用户无论给我们权限还是不给权限,都会调用onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)方法,而且用户不给权限每次进程序还是会询问给不给权限,不给就失败。然后完成获取权限的操作。然后完成击杀用户,拿下一血。
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode){ case 1: if (grantResults.length>0 && grantResults[0] == getPackageManager().PERMISSION_GRANTED) { //申请成功的操作 } else { Toast.makeText(this, "呼叫失败", Toast.LENGTH_SHORT).show(); } break; default: break; } }