1. 程式人生 > 其它 >android | 申請儲存許可權的坑

android | 申請儲存許可權的坑

android | 申請儲存許可權的坑

android6以上很多的許可權不是隻寫manifest.xml就可以了,使用的時候需要懂太申請許可權。
先貼個能跑的程式碼,具體細節有空補上:

public void needPrivilege(){
        //使用相容庫就無需判斷系統版本
        int hasWriteStoragePermission = ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int hasReadStoragePermission = ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.READ_EXTERNAL_STORAGE);
        if (hasWriteStoragePermission == PackageManager.PERMISSION_GRANTED && hasReadStoragePermission == PackageManager.PERMISSION_GRANTED) {
            //擁有許可權,執行操作
            Log.d(TAG, "擁有許可權,直接執行");
            test();
        }else{
            //沒有許可權,向用戶請求許可權
            Log.d(TAG, "沒有許可權,申請許可權");
            ActivityCompat.requestPermissions(this,
                    new String[]{
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.READ_EXTERNAL_STORAGE
                    },mRequestCode);
        }
    }

    //請求許可權後回撥的方法
    //引數: requestCode  是我們自己定義的許可權請求碼
    //引數: permissions  是我們請求的許可權名稱陣列
    //引數: grantResults 是我們在彈出頁面後是否允許許可權的標識陣列,陣列的長度對應的是許可權名稱陣列的長度,陣列的資料0表示允許許可權,-1表示我們點選了禁止許可權
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        boolean hasPermissionDismiss=false;//有許可權沒有通過
        if (mRequestCode == requestCode) {
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == -1) {
                    hasPermissionDismiss = true;
                }
            }
            //如果有許可權沒有被允許
            if (hasPermissionDismiss) {
                //showPermissionDialog();//跳轉到系統設定許可權頁面,或者直接關閉頁面,不讓他繼續訪問
                Toast.makeText(MainActivity.this, "沒有儲存許可權,請手動授權", Toast.LENGTH_LONG).show();
            }else{
                // 執行操作
                Log.d(TAG, "申請到了許可權,開始執行");
                test();
            }
        }
    }