Android 中RxPermissions 的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中RxPermissions 的使用相关的知识,希望对你有一定的参考价值。

参考技术A android 中RxPermissions 的使用方法详解

以请求拍照、读取位置权限为例

第一步,在module的build.gradle中的

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 加入

allprojects

    repositories

        maven url 'https://jitpack.io'

   



第二步,在AndroidManifest.xml中添加自己需要用到的权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="android.permission.CAMERA"/>

第三步,activity中使用以及注意事项

1,创建 RxPermissions 实例

RxPermissions rxPermissions = new RxPermissions(this);

2、RxPermissions 里面的方法具体实现

public static final String[] permissionsGroup =new String[]

Manifest.permission.ACCESS_FINE_LOCATION,

        Manifest.permission.CAMERA;

rxPermissions.requestEach(permissionsGroup)

.subscribe(new Observer()

@Override

            public void onSubscribe(Disposable d)



@Override

            public void onNext(Permission permission)

                    //这里判断用户是否同意了该权限,如:

                    if(permission.name.equals(Manifest.permission.CAMERA))

                         //已获取权限,可以干想干的咯

                      else

                         //主人,我被禁止啦,去设置权限设置那把我打开哟

                     



@Override

            public void onError(Throwable e)



@Override

            public void onComplete()



);

使用RxPermission框架对android6.0权限进行检测

可前往Github上进行查看相关DEMO

https://github.com/tbruyelle/RxPermissions

如果想用RxPermissionminSdkVersion 必须大于等于9.

在gradle中添加如下代码

repositories 
    jcenter() // If not already there


dependencies 
    compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'
举个例子

// Must be done during an initialization phase like onCreate
RxPermissions.getInstance(this)
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> 
        if (granted)  // Always true pre-M
           // I can control the camera now
         else 
           // Oups permission denied
        
    );
如果你想要在一个特殊事件中触发权限申请,你需要在你的初始化段落里,将这个事件订阅。

你可以使用 JakeWharton/RxBinding 把你的view订阅为一个观察者。

举例

// Must be done during an initialization phase like onCreate
RxView.clicks(findViewById(R.id.enableCamera))
    .compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
    .subscribe(granted -> 
        // R.id.enableCamera has been clicked
    );
如果同时有多个权限请求,结果如下

RxPermissions.getInstance(this)
    .request(Manifest.permission.CAMERA,
             Manifest.permission.READ_PHONE_STATE)
    .subscribe(granted -> 
        if (granted) 
           // All requested permissions are granted
         else 
           // At least one permission is denied
        
    );
你也可以用 requestEach和  ensureEach  订阅具体的结果。

RxPermissions.getInstance(this)
    .requestEach(Manifest.permission.CAMERA,
             Manifest.permission.READ_PHONE_STATE)
    .subscribe(permission ->  // will emit 2 Permission objects
        if (permission.granted) 
           // `permission.name` is granted !
        
    );


以上是关于Android 中RxPermissions 的使用的主要内容,如果未能解决你的问题,请参考以下文章

RxPermissions中观察者模式解析

Android -- 开源库权限适配 RxPermissions 的基本使用

Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架

使用RxPermissions(基于RxJava2)

RxPermissions 动态权限 简介 案例

Android 优雅的调用权限申请