Search code examples
javaandroidandroid-studionative

how to know whether the app currently has the 'All Files Access' permission or not. Android 11


but how to validate if the app currently has the 'All Files Access' permission or not. i use this method to ask permission.

Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            intent.addCategory("android.intent.category.DEFAULT");
            intent.setData(Uri.parse(String.format("package:%s",this.getPackageName())));
            startActivityForResult(intent, 2296);

Please help me to fix this :(


Solution

  • declare this permission in your manifest.xml:

       <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    

    for asking MANAGE_EXTERNAL_STORAGE:

          try {
               Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
               intent.setData(Uri.parse(String.format("package:%s", getApplicationContext().getPackageName())));
               startActivityForResult(intent, 2296);
              
           } catch (Exception e) {
    
             Intent intent = new Intent();
             intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
             startActivityForResult(intent, 2296);
           }
    

    get your result in onActivityResult

       @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 2296) {
                if (SDK_INT >= Build.VERSION_CODES.R) {
                    if (Environment.isExternalStorageManager()) {
                        // perform action when allow permission success
                       
                    } else {
                        Toast.makeText(this, "Allow permission for storage access!", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        }
    

    so, basically you can check permission is granted or not in Android11 like this;

    if (SDK_INT >= Build.VERSION_CODES.R) {
       if (Environment.isExternalStorageManager()) {
          // Permission Granted
       }
    }