android 封裝權限

 

Dangerous permissions and permission groups(危險權限和權限組)

                

 

鏈接:權限庫

PermissionManager

android 6.0權限兼容庫

PermissionManager是一個對android6.0運行時申請權限的操作的封裝,將重複調用的多個方法組合封裝在一起,方便調用,簡化代碼和邏輯。PermissionManager的使用比較簡單。大致就一下幾個方法:

  • execute(Activity activity,String permission)
    • 解釋:方法只需要傳遞Activity和permission2個參數,會執行完檢查權限和請求權限的步驟。
  • execute(Activity activity,String... permissions)
    • 解釋:這個方法可以一次傳遞多個權限,進行申請。
  • executeDialog(Activity activity,String permission,Builder builder)
    • 解釋:這個方法是在權限拒絕後,再次進行申請時會彈出一個提示的dialog,給用戶一個提示或解釋。Builder參數是PermissionManager的一個內部類,目的是通過builder對象攜帶Dialog需要的數據。
  • onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults)
    • 解釋:這個方法主要是在將Activity中的onRequestPermissionsResult回調方法中的參數傳遞到PermissionManager中,進行處理。
  • getGrantedInfo(String permission)
    • 解釋:通過傳遞權限來判斷是否授權,返回值boolean

 

eg:案例

在oncreate方法中調用initPermission()

private void initPermission() {
//同時申請多個權限
// PermissionManager.getInstance(getApplicationContext()).execute(this, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);

        //請求單個,顯示對話框的方式
        PermissionManager.getInstance(getApplicationContext()).executeDialog(this, Manifest.permission.RECORD_AUDIO,
                PermissionManager.getInstance(getApplicationContext()).new Builder(this)
                        .setMessage("應用需要獲取您的錄音權限,是否授權?")
                        .setTitle(getString(R.string.app_name))
                        .setIcon(R.mipmap.ic_launcher)
                        .setOk("OK")
                        .setCancel("CANCEL"));
    }

 

在Activity的onRequestPermissionsResult()方法中

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    PermissionManager.getInstance(getApplicationContext()).onRequestPermissionsResult(requestCode, permissions, grantResults);
}

 

在需要使用到權限的代碼之前做判斷,如:

if (PermissionManager.getInstance(getApplicationContext()).getGrantedInfo(Manifest.permission.RECORD_AUDIO) ) {
    Toast.makeText(FirstActivity.this, "錄音權限已經獲取", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(FirstActivity.this, "你還沒有獲取錄音權限", Toast.LENGTH_SHORT).show();
}

注意:在execute()和getGrantedInfo()方法使用的時候時機需要把握對,在execute()執行後申請權限,在onRequestPermissionsResult()方法中才獲取最新的權限信息,再做處理。如果在此之前調用getGrantedInfo()可能拿不到正確的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章