RxPermissions introduction,
CreateRxPermissionsinstance :
RxPermissions rxPermissions = new RxPermissions(this); // where this is an Activity instance
Example : request the CAMERA permission (with Retrolambda for brevity, but not required)
// Must be done during an initialization phase like onCreaterxPermissions .request(Manifest.permission.CAMERA) .subscribe(granted -> { if (granted) { // Always true pre-M // I can control the camera now } else { // Oups permission denied } });
If you need to trigger the permission request from a specific event, you need to setup your event as an observable inside an initialization phase.
You can useJakeWharton/RxBindingto turn your view to an observable (not included in the library).
Example :
// Must be done during an initialization phase like onCreateRxView.clicks(findViewById(R.id.enableCamera)) .compose(rxPermissions.ensure(Manifest.permission.CAMERA)) .subscribe(granted -> { // R.id.enableCamera has been clicked });
If multiple permissions at the same time, the result is combined :
rxPermissions .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 } });
You can also observe a detailed result withrequestEachorensureEach:
rxPermissions .requestEach(Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE) .subscribe(permission -> { // will emit 2 Permission objects if (permission.granted) { // `permission.name` is granted ! } else if (permission.shouldShowRequestPermissionRationale) { // Denied permission without ask never again } else { // Denied permission with ask never again // Need to go to the settings } });
You can also get combined detailed result withrequestEachCombinedorensureEachCombined:
rxPermissions .requestEachCombined(Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE) .subscribe(permission -> { // will emit 1 Permission object if (permission.granted) { // All permissions are granted ! } else if (permission.shouldShowRequestPermissionRationale) // At least one denied permission without ask never again } else { // At least one denied permission with ask never again // Need to go to the settings } });
Look at thesampleapp for more.