int checkPermission = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO) +ContextCompat.checkSelfPermission(activity,Manifest.permission.READ_PHONE_STATE) +ContextCompat.checkSelfPermission(activity,Manifest.permission.WRITE_EXTERNAL_STORAGE) +ContextCompat.checkSelfPermission(activity,Manifest.permission.READ_EXTERNAL_STORAGE); if(checkPermission!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},22);
首先通过ContextCompat的checkselfPermission方法判断用户是否已经授权了。
如果没有授权过,通过ActivityCompat的requestPermissions方法向用户申请授权。
调用完requestPermissions之后,系统会弹出一个权限申请的对话框,然后用户可以同意或者拒绝我们的权限申请,不论哪种结果,最终都会回调到onRequestPermissionResult方法中,而授权结果会封装在grantResults参数中。
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch(requestCode){ case 22: for(int result: grantResults){ if(result== PackageManager.PERMISSION_DENIED){ AlertDialog dialog = new AlertDialog.Builder(this).setTitle("申请权限").setMessage("这些权限很重要").setNegativeButton("取消",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT); } }).setPositiveButton("设置",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:"+MainActivity.this.getPackageName())); // ActivityCompat.startActivity(MainActivity.this,intent, null); MainActivity.this.startActivity(intent); } }).create(); dialog.show(); } } break; default: break; }