ps : 這是最早的文章,由新的權限組件文章
話說相同的開源庫總是有一些的,不唯一,權限管理也是如此,我們可以選擇 AndPermission,RxPermission 等,那么我們常見的需求出現一個了,未來如何在切換開源庫時不影響我們的業務代碼嗎,要達到一處崔改,處處適用的效果呢
這里就要求我們對這些開源庫進行二次封裝了,這里我簡單的封裝了一下,看看 api
btn_permission.setOnClickListener(v -> {
PermissionComponent.with(this)
.permissin(Manifest.permission.CAMERA)
.onSuccess(() -> show("成功!"))
.onDenial(() -> show("失敗!"))
.onDontShow(() -> {
// 打開權限管理頁面
PermissionComponent.startSettingActivity(MainActivity.this, 200);
})
.run();
});
支持 activity,fragment,content,這個支持幾種需要看我們里買使用的什么開源庫了。提供了3個回調,給權限,拒絕權限,不再顯示權限彈窗的回調,提供了打開權限設置頁的功能。切換底層開源庫的方法都懶沒寫。
代碼很簡單,就是很繁瑣,我簡單說一下
Snip20180420_11.png
- contentSource 維護不同的上下文類型
- executer 維護的不同的具體的開源庫
- action 是針對3種回調的抽象接口
- permissioncontain 保存全部的所需的參數
- PermissionComponent 是暴露給外層使用的工具累
- PermissinManage 是具體的業務實現類
這個例子里面,我只是實現了 AndPermission 的集成,RxPermission 有興趣的自己去搞搞,原理都是一樣的
demo 地址:BW_PermissionDemo
最后
寫完代碼之后我是沮喪的,感覺就是簡單的寫了半遍 AndPermission,其實可以寫的很簡單的
public static void requestPermission( Activity activity,Action success,Action denial,Action dontShow,String... permissions ){...}
public static void requestPermission( Fragment fragment,Action success,Action denial,Action dontShow,String... permissions ){...}
public static void requestPermission( Context context,Action success,Action denial,Action dontShow,String... permissions ){...}
就像這樣就行了, 我當時也是為了想要 API 好看一點,沒想到代碼會爆炸這么多,這個真是仁者見仁,智者見智的事,我覺得代碼封裝就是為了方便大家,最簡單的一般來說都是比較好的。