運行時權限
Android6.0系統中新增加了運行時權限。
運行時權限也就是說在應用程序使用的過程中需要手動進行授權的權限。
Android將權限歸成了兩類,一類是普通權限,一類是危險權限。
對於普通權限,系統則會自動幫我們授權。
而危險權限則需要用戶手動進行授權。
以下為Android中所有的危險權限
如果需要使用的權限不在這張表中,那麽只需要在清單文件中添加權限聲明即可。
運行時權限的使用
首先判斷用戶是不是已經給我們授權了,借助的是ContextCompat.checkSelfPermission()方法。
checkSelfPermission()方法接收兩個參數,第一個為Context,第二個為具體的權限名
然後在使用checkSelfPermission()方法的返回值和PackageManager.PERMISSION_GRANTED做比較。
相等則說明用戶已經授權,不等則表示用戶沒有授權。
如果已經授權,則去執行具體的邏輯即可。
如果沒有授權,則需要調用ActivityCompat.requestPermissions()方法申請授權。
requestPermissions()方法接受三個參數,第一個參數是Activity的實例,第二個參數是一個String數組,將權限名放在裏面即可。第三個參數是請求碼,傳入一個唯一值即可。
1 if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){ 2 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1); 3 }else{ 4 readContacts(); 5 }
執行完requestPermissions()方法之後,會彈出一個對話框,讓用戶來選擇允許或是拒絕權限。
不論是允許還是拒絕,最終都會回調onRequestPermissionsResult()方法。
授權的結果封裝在grantResults參數中。最終只需要判斷一下最後的授權結果。
然後執行相應的邏輯即可。
requestPermissions()方法裏的 requsetCode參數則是之前requestPermissions()方法傳入的請求碼。
1 @Override 2 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 3 4 }
運行時權限