Android 权限申请

Android 权限申请

使用RxPermissions进行权限申请和用户拒绝,并且选择不再提示的处理

implementation 'com.github.tbruyelle:rxpermissions:0.12'
public class PermissionUtils {

    /**
     * 权限申请
     *
     * @param activity
     * @param callBack
     */
    @SuppressLint("CheckResult")
    public static void requestPermission(Activity activity, ICallBack callBack, String... permissions) {
        final RxPermissions rxPermissions = new RxPermissions(activity);
        rxPermissions.requestEach(permissions)
                .subscribe(permission -> {
                    if (permission.granted) {
                        // 用户允许权限
                        callBack.callback();
                    } else if (permission.shouldShowRequestPermissionRationale) {
                        // 用户拒绝了权限申请
                    } else {
                        // 用户拒绝,并且选择不再提示
                        // 可以引导用户进入权限设置界面开启权限
                        permissionRefuseDialog(activity);
                    }
                });
    }

    public static AlertDialog alertDialog;

    public static void permissionRefuseDialog(Context context) {
        //禁止后的弹框
        if (alertDialog == null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setTitle(context.getString(R.string.apply_permission))
                    .setMessage(context.getString(R.string.delegating_reason))
                    .setPositiveButton(context.getString(R.string.delegating), (dialog, id) -> {
                        if (alertDialog != null && alertDialog.isShowing()) {
                            alertDialog.dismiss();
                        }
                        CommentUtils.openPermission(context);
                    });
            alertDialog = builder.create();
//            alertDialog.setCanceledOnTouchOutside(false);
        }
        alertDialog.show();
    }

	public interface ICallBack {
    	void callback();
	}
}
	  /**
     * 打开权限界面
     * @param context
     */
    public static void openPermission(Context context){
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
        intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        context.startActivity(intent);
    }

调用示例

 	/**
     * 读取手机联系人
     */
    private void gotoContacts() {
        PermissionUtils.requestPermission(this, () -> {
            Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intent, REQUEST_CODE_CONTACTS);
        }, Manifest.permission.READ_CONTACTS);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值