美文网首页
android RxPermissions

android RxPermissions

作者: 浪人残风 | 来源:发表于2021-12-30 13:46 被阅读0次

RxPermissions https://github.com/tbruyelle/RxPermissions

  1. 添加依赖
dependencies {
//   RxPermissions 的使用方法详解
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
}

项目根目录的build.gradle下添加 maven { url 'https://jitpack.io' }

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
               maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
        google()
        jcenter()
    }
}
public class RxPermissionsActivity extends AppCompatActivity {
    /**
     * 权限组
     */
    private static final String[] permissionsGroup = new String[]{
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.CAMERA};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rx_permissions);
    findViewById(R.id.onclick_tv).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            testRequestEach(v);
        }
    });
}

/*
    private void 方法一() {
//        创建 RxPermissions 实例
        RxPermissions rxPermissions = new RxPermissions(RxPermissionsActivity.this);
        rxPermissions.request(permissionsGroup)
                .subscribe(new Observer<Boolean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Boolean aBoolean) {
                    if (aBoolean) {
                        Toast.makeText(RxPermissionsActivity.this, "已获取权限,可以干想干的咯", Toast.LENGTH_LONG)
                                .show();
                    } else {
//只有用户拒绝开启权限,且选了不再提示时,才会走这里,否则会一直请求开启
                            Toast.makeText(RxPermissionsActivity.this, "主人,我被禁止啦,去设置权限设置那把我打开哟", Toast.LENGTH_LONG)
                                    .show();
                        }
                    }
                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
}*/

/**
 * request例子:
 * 不支持返回权限名;
 * 返回的权限结果:全部同意时值true,否则值为false
 */
public void testRequest(View view) {
    RxPermissions rxPermissions = new RxPermissions(this);
    rxPermissions.request(permissionsGroup)
            .subscribe(new Consumer<Boolean>() {
                @Override
                public void accept(Boolean aBoolean) throws Exception {

                }
            });

}

/**
 * requestEach例子:
 * 把每一个权限的名称和申请结果都列出来
 */
public void testRequestEach(View view) {
    RxPermissions rxPermissions = new RxPermissions(this);
    rxPermissions.requestEach(permissionsGroup)
            .subscribe(new Consumer<Permission>() {
                @Override
                public void accept(Permission permission) throws Exception {
                    if (permission.granted) {
                        // 用户已经同意该权限
                    } else if (permission.shouldShowRequestPermissionRationale) {
                        // 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时。还会提示请求权限的对话框
                    } else {
                        // 用户拒绝了该权限,而且选中『不再询问』那么下次启动时,就不会提示出来了,
                    }
                }
            });
}

/**
 * requestEachCombined例子:
 * 返回的权限名称:将多个权限名合并成一个
 * 返回的权限结果:全部同意时值true,否则值为false
 */
public void testRequestEachCombined(View view) {
    RxPermissions rxPermissions = new RxPermissions(this);
    rxPermissions.requestEachCombined(permissionsGroup)
            .subscribe(new Consumer<Permission>() {
                @Override
                public void accept(Permission permission) throws Exception {

                }
            });
}

/**
 * ensure例子:
 * 必须配合rxjava,回调结果与request一样
 */
public void testEnsure(View view) {
    RxPermissions rxPermissions = new RxPermissions(this);
    Observable.timer(10, TimeUnit.MILLISECONDS)
            .compose(rxPermissions.ensure(permissionsGroup))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Boolean>() {
                @Override
                public void accept(Boolean aBoolean) throws Exception {
                    Log.i("cxw", "申请结果:" + aBoolean);
                }
            });
}

/**
 * ensureEach例子:
 * 必须配合rxjava,回调结果跟requestEach一样
 */
public void testEnsureEach(View view) {
    RxPermissions rxPermissions = new RxPermissions(this);
    //
    Observable.timer(10, TimeUnit.MILLISECONDS)
            .compose(rxPermissions.ensureEach(permissionsGroup))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Permission>() {
                @Override
                public void accept(Permission permission) throws Exception {
                    Log.i("cxw", "权限名称:" + permission.name + ",申请结果:" + permission.granted);
                }
            });
}

/**
 * ensureEachCombined例子:
 * 必须配合rxjava,回调结果跟requestEachCombined一样
 */
public void testEnsureEachCombined(View view) {
    RxPermissions rxPermissions = new RxPermissions(this);
    Observable.timer(10, TimeUnit.MILLISECONDS)
            .compose(rxPermissions.ensureEachCombined(permissionsGroup))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Permission>() {
                @Override
                public void accept(Permission permission) throws Exception {
                    Log.i("cxw", "权限名称:" + permission.name + ",申请结果:" + permission.granted);
                }
            });
}
}

相关文章

网友评论

      本文标题:android RxPermissions

      本文链接:https://www.haomeiwen.com/subject/jqmiqrtx.html