// 要申请的权限 private String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE};
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); // 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 检查该权限是否已经获取 int i = ContextCompat.checkSelfPermission(this, permissions[0]); // 权限是否已经 授权 GRANTED---授权 DINIED---拒绝 if (i != PackageManager.PERMISSION_GRANTED) { // 如果没有授予该权限,就去提示用户请求 CustomDialog.Builder builder = new CustomDialog.Builder(mContext); builder.setMessage("是否开启存储权限?"); builder.setTitle("帮助"); builder.setPositiveButton("是", (new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); ActivityCompat.requestPermissions(WelcomeActivity.this, permissions, 321); } })); builder.setNegativeButton("否", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } } }
// 用户权限申请的回调方法 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 321) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { boolean b = shouldShowRequestPermissionRationale(permissions[0]); if (!b) { showDialogTipUserGoToAppSettting(); } else { finish(); } } } } } // 跳转到当前应用的设置界面 private void goToAppSetting() { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, 123); } // 提示用户去应用设置界面手动开启权限 private void showDialogTipUserGoToAppSettting() { CustomDialog.Builder builder = new CustomDialog.Builder(WelcomeActivity.this); builder.setMessage("请在-应用设置-权限-中,允许嗨宝快学使用存储权限来保存用户数据!"); builder.setTitle("存储权限不可用"); builder.setPositiveButton("立即开启", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); // 跳转到应用设置界面 goToAppSetting(); } }); builder.setNegativeButton("退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }); builder.create().show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 123) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 检查该权限是否已经获取 int i = ContextCompat.checkSelfPermission(this, permissions[0]); // 权限是否已经 授权 GRANTED---授权 DINIED---拒绝 if (i != PackageManager.PERMISSION_GRANTED) { // 提示用户应该去应用设置界面手动开启权限 showDialogTipUserGoToAppSettting(); } else { Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show(); } } } }