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()可能拿不到正確的結果