android开发--RxPermissions的简单使用

1.RxPermissions的好处

RxPermissions是帮助开发者简化requestPermissions()相关的处理。

(1) 开发者不用担心Android运行环境的版本,如果系统是Android 6.0之前的版本,RxPermissions返回的结果是,app请求的每个权限都被允许(granted)。 
RxPermissions内部已经对Android版本进行了判断:
    boolean isMarshmallow() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    }

    public boolean isGranted(String permission) {
        // 如果是Android 6.0 (Api 23)之前,则权限被允许使用。
        return !isMarshmallow() || mRxPermissionsFragment.isGranted(permission);
    }
(2) 将权限申请的代码(requestPermissions())和请求结果的代码(onRequestPermissionsResult())放在一起管理,避免了代码的分散。

(3) RxPermissions具备Rx(RxJava)的特性,例如可以使用链式操作,可以执行filter操作,transform操作,等等。

2.RxPermissions的使用

1.先添加依赖

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
}

2.代码使用实例

final PermissionListener permissionListener = new PermissionListener() {
    @Override
    public void onPermissionGranted() {
        //获取权限
    }

    @Override
    public void onPermissionDenied(ArrayList<String> deniedPermissions) {
        //拒绝权限
    }
};
new RxPermissions(this)
        .request(Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS)
        .subscribe(new Action1<Boolean>() {
            @Override
            public void call(Boolean aBoolean) {
                if (permissionListener == null) return;
                if (aBoolean) {
                    permissionListener.onPermissionGranted();
                } else {
                    permissionListener.onPermissionDenied(null);
                }
            }
        });

3.app内有很多权限需要调用,为了方便使用封装工具类TedPermissionUtils,以便于app内调用。

封装类实例:

public class TedPermissionUtils {
/**
 * 检查定位权限
 *
 * @param context
 * @param permissionListener
 */
public static void checkLocation(final Context context, final PermissionListener permissionListener) {
    new RxPermissions((Activity) context)
            .request(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS)
            .subscribe(new Action1<Boolean>() {
                @Override
                public void call(Boolean aBoolean) {
                    if(permissionListener == null)
                        return;
                    if (aBoolean) {
                        permissionListener.onPermissionGranted();
                    } else {
                        permissionListener.onPermissionDenied(null);
                    }
                }
            });
}
}

app调用实例:

TedPermissionUtils.checkLocation(context, new PermissionListener() {
    @Override
    public void onPermissionGranted() {
        if (location == null)
            mLocationClient.start();
    }

    @Override
    public void onPermissionDenied(ArrayList<String> deniedPermissions) {
        //这里拒绝权限可以做你想要的操作
        //toast.shortToast("您拒绝了位置权限");
      //  appManager.finishActivity();
    }
});

3.参考

https://github.com/tbruyelle/RxPermissions

猜你喜欢

转载自blog.csdn.net/zztt113/article/details/84135920