android開發--RxPermissions的簡單使用
阿新 • • 發佈:2018-12-21
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(); } });