文章出處

先直接看代碼:

 1 public void onClick(View v){
 2         onCallPermission();
 3 }
 4 
 5 public void onCallPermission(){
 6         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判斷當前系統的SDK版本是否大于23
 7             //如果當前申請的權限沒有授權
 8             if (!(checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED)){
 9                 //第一次請求權限的時候返回false,第二次shouldShowRequestPermissionRationale返回true
10                 //如果用戶選擇了“不再提醒”永遠返回false。
11                 if (shouldShowRequestPermissionRationale(android.Manifest.permission.RECORD_AUDIO)){
12                     Toast.makeText(this, "Please grant the permission this time", Toast.LENGTH_LONG).show();
13                 }
14                 //請求權限
15                 requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},1);
16             }else {//已經授權了就走這條分支
17                 Log.i("wei", "onClick granted");
18             }
19         }
20     }
21 
22 
23 @Override
24     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
25         if (requestCode==1){
26             if (permissions[0].equals(Manifest.permission.RECORD_AUDIO)&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
27                 listernUi();//得到權限之后去做的業務
28             }else {//沒有獲得到權限
29                 Toast.makeText(this,"你不給權限我就不好干事了啦",Toast.LENGTH_SHORT).show();
30             }
31         }
32     }

第一個方法:Button的點擊事件,點擊之后請求權限,然后走第二個方法。

第二個方法:請求權限,checkSelfPermission(Manifest.permission.RECORD_AUDIO)是檢查應用本身是否包含對應的權限,如果包含返回PackageManager.PERMISSION_GRANTED; 

  shouldShowRequestPermissionRationale :應用安裝后第一次訪問,直接返回false;第一次請求權限時,用戶拒絕了,下一次             shouldShowRequestPermissionRationale()返回 true,這時候可以顯示一些為什么需要這個權限的說明;第二次請求權限時,用戶拒絕了,并選擇了“不再提醒”的選項時:shouldShowRequestPermissionRationale()返回 false;

 requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},1); :是請求對應的權限,會彈出一個對話框讓用戶選擇是否授權,用戶選擇之后會走 onRequestPermissionsResult這個回調方法

第三個方法:當用戶選擇之后進入該方法,授權處理之后的業務邏輯就寫在這個方法里面,(不建議直接把業務邏輯寫在requestPermission之后,寫在這個回調方法中更好),主要是先對requestCode進行判斷,看他對應的是哪個requestPermissions方法,然后判斷是否授權了。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()