1. 程式人生 > >關於動態許可權申請,多個動態許可權申請

關於動態許可權申請,多個動態許可權申請

public final static int REQUEST_READ_PHONE_STATE = 1;
加上這個定義,忘記新增到程式碼片了,我的問題,這次補上了。
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //“Manifest.permission.”後面接上要申請的許可權,我這裡是讀取許可權
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
            //進入到這裡代表沒有許可權.
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PHONE_STATE);
        } else {
            //有許可權,這裡面新增需要許可權的方法
            
        }
    }

 //新增許可權,我這裡是讀取許可權,可以不用動這段程式碼
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case REQUEST_READ_PHONE_STATE:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    //使用者同意授權,這裡面新增需要許可權的方法
                    
                }//else 使用者拒絕授權
                break;

            default:
                break;
        }
    }
    
        public void Read(View v) {
        //檢查許可權,將讀許可權換成你要申請的許可權
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            //進入到這裡代表沒有許可權.“Manifest.permission.”後面同上一樣,換成你要申請的許可權

            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
                //已經禁止提示了
                Toast.makeText(ContrastActivity.this, "您已禁止該許可權,需要重新開啟。", Toast.LENGTH_SHORT).show();
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PHONE_STATE);
            }

        } else {
            //執行需要許可權的方法或語句
            
        }
    }


現在我們常常在敲程式碼執行app的時候,會遇到需要申請許可權的問題,而我們又在AndroidMainfest.xml檔案里加入了許可權,這是因為在android 6.0以上需要申請動態許可權,下面我將申請動態許可權的格式發下,希望為和我一樣遇到這個問題的人解決下問題。至於為什麼要動態申請許可權,你們可以百度下,有比我功力精深的講解過,建議把危險許可權看下,多注意,以後在開發中少不了多打交道的。

上面的程式碼就是動態申請許可權的格式了,一些注意點我都註釋了,新手在學習中,如果有什麼地方疏漏的請指點,你們的建議和指點是我前進的明燈

下面是多個的動態申請方法,然後OnCreat方法裡呼叫permission就行了

//許可權獲取
    private void permission() {
        List<String> permissionLists = new ArrayList<>();
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            permissionLists.add(Manifest.permission.READ_PHONE_STATE);
        }
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            permissionLists.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }

        if (!permissionLists.isEmpty()) {//說明肯定有拒絕的許可權
            ActivityCompat.requestPermissions(this, permissionLists.toArray(new String[permissionLists.size()]), PERMISSION_REQUESTCODE);
        } else {
            Toast.makeText(this, "許可權都授權了,可以搞事情了", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PERMISSION_REQUESTCODE:
                if (grantResults.length > 0) {
                    for (int grantResult : grantResults) {
                        if (grantResult != PackageManager.PERMISSION_GRANTED) {
                            Toast.makeText(this, "某一個許可權被拒絕了", Toast.LENGTH_SHORT).show();
                            return;
                        }
                    }
                    //其他邏輯(這裡當權限都同意的話就執行打電話、獲取本地資訊等邏輯)
                }
                break;
            default:
                break;
        }
    }