Android RxPermissions

写这个的已经很多了,我主要是遇到了一些问题 记录一下

首先是版本的问题

这个需要与Rxjava协调使用,那么引用的时候如果版本不一样,创建的方法也是不同的比如说我用的这个版本创建实例的方法为

RxPermissions.getInstance();

下边是我用的版本

值得一提的是 因为Android的机制问题 如果用户第一次拒绝了权限 那么第二次请求权限时,系统会提示“不再提示”

当时我考虑的是,比如第一次拒绝与第二次拒绝分别做操作,但是后来我发现没有必要(不考虑产品需求的情况下)

事实上,不管用户是否勾选了不再提示,每次请求权限,都会执行失败的方法,我做的就是在失败里边做操作。

附上工具类

public class PermisionUtil {


    /**
     * 申请权限
     */
    public static void getPermision(final Activity mActivity, final PermisionListener permisionListener) {

        final boolean permision = false;
        if(ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
                ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
                ActivityCompat.checkSelfPermission(mActivity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){

            RxPermissions.getInstance(mActivity).request(Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.CAMERA)
                    .subscribe(new Consumer<Boolean>() {
                        @Override
                        public void accept(Boolean aBoolean) throws Exception {
                            if (aBoolean) {
                                //用户同意
                                permisionListener.success();
                            } else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(mActivity).setTitle("权限申请")
                                        .setMessage("请在打开的窗口的权限中开启权限,以正常使用本应用")
                                        .setPositiveButton("去设置", new DialogInterface.OnClickListener() {

                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                try {
                                                    Intent intent =
                                                            new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" + mActivity.getPackageName()));
                                                    intent.addCategory(Intent.CATEGORY_DEFAULT);

                                                    // Android L 之后Activity的启动模式发生了一些变化
                                                    // 如果用了下面的 Intent.FLAG_ACTIVITY_NEW_TASK ,并且是 startActivityForResult
                                                    // 那么会在打开新的activity的时候就会立即回调 onActivityResult
                                                    // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                                    mActivity.startActivity(intent);
                                                    mActivity.finish();
                                                } catch (Throwable e) {

                                                }
                                            }
                                        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                mActivity.finish();
                                            }
                                        });
                                builder.setCancelable(false);
                                builder.show();
                            }
                        }
                    });
        } else {
            permisionListener.success();
        }


    }


    public interface PermisionListener {
        void success();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值