2025-03-24

android 6.0權限申請以及拒絕後的控制解析,Android 6.0後官方對權限做瞭更改,一些涉及到用戶隱私的權限必須要用戶手動允許;而對於某些app來說,某個權限一旦被用戶拒絕,則面臨的是整個app的癱瘓,所以,我們要在合適的位置對出現的異常情況進行特殊操作:
首先調用權限的方法:

ActivityCompat.requestPermissions(final @NonNull     Activity activity,final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode)

此方法的三個參數:①為調用權限的當前activity
②權限數組,所有的權限都可以整合到這裡
③請求碼,用來判斷是此次請求操作,後面可以用到

此方法已經判斷瞭sdk>=23的情況,所以我們無需再次判斷。
另外有時候我們在需要某個權限的時候,不知道是否已經申請過,這時候我們就需要檢查一下,這裡檢查權限的代碼為:

ActivityCompat.checkSelfPermission(@NonNull Context context, @NonNull String permission)

其中①context為當前上下文對象
②permission為需要檢查的權限為字符串類型
此方法返回值為int 型,如果==0,則代表已經擁有過權限;如果==-1,則代表還未申請此權限,此方法在任何時間都可以判斷。

再一個就是權限申請都是以彈窗的形式讓用戶選擇允許還是拒絕;不管用戶是選擇哪一項,在點擊完成(如果同時申請多個權限,則需要所有權限全部點擊完)後,必會觸發下面這個回調方法:

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults)

這個方法是FragmentActivity實現ActivityCompat.OnRequestPermissionsResultCallback後的回調方法,用戶在activity中隻要重寫這個方法就可以瞭;
這個方法中有三個參數:①代表上面申請權限時提供的請求碼
②是此次申請的所有權限的數組,數組中元素順序按照申請時的順序排列;
③返回的允許還是拒絕的結果碼,以int數組的方式一一對應於②參數的權限,其中每個元素隻有兩種值:0和-1,0即是代表已經允許,-1則代表用戶主動拒絕;
通過這個方法我們就可以根據用戶的回應選擇不同的處理方式,比如如果某個權限用戶必須允許,我們則可以在用戶拒絕後強制彈出一個不可取消的dialog,引導用戶進入權限設置頁面進行設置,用戶進入權限頁面的代碼如下:

Intent intent = new Intent();  intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);

好瞭,具體權限申請這塊的基本需求就隻有這麼多瞭,thanks

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *