定製本身的動態申請權限庫

爲何要定製本身的動態申請權限庫

Android6.0以後,Android系統就要求敏感權限須要動態申請。這位用戶帶來了很大的方便,也給開發者帶來了更大的挑戰。官方提供了相應的API供開發者使用,可是使用起來略顯麻煩。市場上也有不少開源權限申請庫,以前有使用rxPermission,此次也有參考rxPermission的代碼。使用開源庫當然很方便,可是我以爲,開源的意義在於提供一種思路,給其餘同行一個借鑑,你們最好仍是要會寫本身的庫,哪怕搓一點也不要緊。git

動態申請權限的思路

  • 第一種:官方的寫法是在當前Activity申請權限,在當前Activity回調結果。這種寫法很標準,可是很繁瑣,寫起來很是不方便。
  • 第二種:以前看到一個同事寫的庫,他是跳到一個新的Activity,而後申請權限,在該Activity監聽回調。這種方法達到了方便使用的效果,可是體驗不是很好。我寫的第一個版本就是這個方法。
  • 第三種:在當前Activity添加一個Fragment,在該Fragment中申請權限,並在該Fragment中監聽返回結果。這是rxPermission的思路,我以爲這是三種方法中最好的方法,最終版本也是採用的這個方法。

代碼實現步驟

  • 首先,寫一個入口類:SchPermission,構造函數傳入activity,建立fragment添加到該activity。
  • 而後,建立一個Fragment類:SchPermissionFragment。具體的申請權限申請及申請結果回調都在該fragment中。
  • 爲了防止同時屢次調用申請權限接口,致使回調錯亂,每次申請權限的requestCode都不同,建立一個HashMap存儲requestCode和callback,一一對應,防止回調錯亂。

使用例子

SchPermission mSchPermission = new SchPermission(this);
  mSchPermission
                        .request(new String[] {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE},
                                new
                                        IPermissionCallback() {
                                            @Override
                                            public void onPermissionResult(int requestCode,
                                                                           String[] permissions,
                                                                           int[] grantResults) {
                                                // 根據權限申請結果處理業務
                                            }
                                        });

後記

寫的比較簡單,請你們多多指教。github

項目地址

https://github.com/shench5612390/SchPermission/tree/masteride

相關文章
相關標籤/搜索