1. 程式人生 > >Android 6.0執行時許可權勾選不再詢問後該如何處理?

Android 6.0執行時許可權勾選不再詢問後該如何處理?

Android 6.0執行時許可權勾選不再詢問後該如何處理?

當第一次請求許可權申請被拒絕後再進行第二次申請時,對話方塊中會多出一個 不再詢問 的複選框。如果勾選了該複選框並且拒絕請求,那麼以後將無法再申請該許可權。也就是說在呼叫 requestPermissions() 後,onRequestPermissionsResult() 會立刻被呼叫並且申請結果為 PERMISSION_DENIED 。 其實這個時候還是有一根救命稻草的。

判斷是否勾選不再詢問

首先需要判斷使用者是否勾選了不再詢問。

@Override

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

switch (requestCode){

case MY_PERMISSIONS_APPLY:

for (int i = 0; i < grantResults.length; i++) {

//判斷許可權的結果,如果有被拒絕,就return

if (grantResults[i] == PackageManager.PERMISSION_DENIED){

if (!ActivityCompat.shouldShowRequestPermissionRationale(this,

permissions[i])){

showToast("點選許可權,並開啟全部許可權");

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, REQUEST_PERMISSION_SETTING);

}

ActivityCompat 位於 support.v7 包中,因為執行時許可權是 6.0 的新特性,使用該類可以省略對版本的判斷當權限申請被拒絕並且shouldShowRequestPermissionRationale() 返回 false 就表示勾選了不再詢問。轉到設定介面現在我們唯一能做的就是跳轉到我們 App 的設定介面,讓使用者手動開啟許可權了。

也就是這幾行程式碼,上面已經貼出,方便大家參考:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, REQUEST_PERMISSION_SETTING);

·當然,你也可以先彈出對話方塊詢問使用者是否要授予許可權,然後再跳轉。

跳轉到設定介面呼叫的是 startActivityForResult() 而不是 startActivity() 。

在 onActivityResult() 中沒有必要對 resultCode 進行判斷,因為使用者只能通過返回鍵才能回到我們的 App 中,所以 resultCode 總是為 RESULT_CANCEL。

在 onActivityResult() 中還需要對許可權進行判斷,因為使用者有可能沒有授權就返回了!

 

轉載:https://www.jianshu.com/p/c02b9e7a4ae2