Home > Mobile >  how to know whether the app currently has the 'All Files Access' permission or not. Androi
how to know whether the app currently has the 'All Files Access' permission or not. Androi

Time:06-29

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 :(

CodePudding user response:

create new dummy 0-bytes file in root of internal memory and then remove it. if both operations success then you have access. when you won't have access then your code will throw Exception (on create-file step), which you can try{ }catch(Exception e) (preventing app crash)

path for internal/external/shared can be obtained from Environment class, I would try at first getExternalStorageDirectory

CodePudding user response:

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
   }
}
  • Related