BaseActivity中封装权限动态适配

来源:互联网 发布:中国经济史图书知乎 编辑:程序博客网 时间:2024/06/03 21:59

场景

安卓6.0以上需动态适配权限(有些机型5.0以上需动态适配)。每Activity中写大量代码显繁杂,故将该部分封装在BaseActivity中。

用法

BaseActivity

/*权限响应码*/protected static final int REQUEST_STORAGE_READ_ACCESS_PERMISSION = 101;protected static final int REQUEST_CAMERA_PERMISSION = 102;/*对话框*/private AlertDialog alertDialog;/*** Requests given permission.* If the permission has been denied previously, a Dialog will prompt the user  to grant the permission, otherwise it is requested directly.*/protected void requestPermission(final String permission, String rationale, final int requestCode) {    if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {        showAlertDialog(getString(R.string.permission_title_rationale), rationale,                new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                            ActivityCompat.requestPermissions(BaseActivity.this, new String[]{permission}, requestCode);                    }                }, getString(R.string.ensure), null, getString(R.string.cancel));    } else {        ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);    }}/*** This method shows dialog with given title & message.* Also there is an option to pass onClickListener for positive & negative button.** @param title                         - dialog title* @param message                       - dialog message* @param onPositiveButtonClickListener - listener for positive button* @param positiveText                  - positive button text* @param onNegativeButtonClickListener - listener for negative button* @param negativeText                  - negative button text*/protected void showAlertDialog(@Nullable String title, @Nullable String message,                               @Nullable DialogInterface.OnClickListener onPositiveButtonClickListener,                               @NonNull String positiveText,                               @Nullable DialogInterface.OnClickListener onNegativeButtonClickListener,                               @NonNull String negativeText) {    AlertDialog.Builder builder = new AlertDialog.Builder(this);    builder.setTitle(title);    builder.setMessage(message);    builder.setPositiveButton(positiveText, onPositiveButtonClickListener);    builder.setNegativeButton(negativeText, onNegativeButtonClickListener);    alertDialog = builder.show();}

资源文件

<string name="permission_write_storage_rationale">设备需要写权限访问照片</string>

其它Activity

/*** 从相册选择*/private void pickFromGallery() {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN            && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {        requestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, getString(R.string.permission_read_storage_rationale), REQUEST_STORAGE_READ_ACCESS_PERMISSION);    } else {      startActivityForResult(pickIntent, GALLERY_REQUEST_CODE);    }}/*** Callback received when a permissions request has been completed.*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {    switch (requestCode) {        case REQUEST_STORAGE_READ_ACCESS_PERMISSION:            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                pickFromGallery();            }            break;        default:            super.onRequestPermissionsResult(requestCode, permissions, grantResults);    }}
原创粉丝点击