1. 程式人生 > >Android6.0寫入儲存動態申請許可權

Android6.0寫入儲存動態申請許可權

由於安卓6.0的限制,特殊許可權在AndroidManifest檔案中設定不起效果,需要在程式碼中動態設定。

下面的程式碼是用於申請訪問或寫入儲存的許可權,如下圖.


  • 需要在AndroidManifest檔案中配置許可權。(必須)
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

如果是請求拍照攝像頭的許可權則後面是CAMERA,具體程式碼下面的STORAGE響應的換成CAMERA

-----------------------------------------

  • 首先判斷當前sdk是否大於6.0,是則判斷是否已經開啟了許可權,否則直接執行程式碼doCode()
  • 判斷是否已經開啟許可權,如果還沒有許可權,則執行requestPermissions();
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
                    if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
                        //沒有許可權則申請許可權
                        ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
                    }else {
                        //有許可權直接執行,docode()不用做處理
                        doCode();

                    }
                }else {
                    //小於6.0,不用申請許可權,直接執行
                    doCode();
                }
  • 在活動中呼叫函式onRequestPermissionsResult()
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    //執行程式碼,這裡是已經申請許可權成功了,可以不用做處理
                    doCode();

                }else{
                    ToastUtil.showShort(MainActivity.this,"許可權申請失敗");
                }
                break;
        }
    }