android | 申請儲存許可權的坑
阿新 • • 發佈:2022-05-08
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(); } } }