Storage Permission in Android 13
In this comprehensive tutorial, we'll show you how to effectively manage multiple permissions in Android 13, ensuring a seamless user experience and airtight security. If you're an Android app developer looking to navigate the complexities of handling various permissions, you're in the right place!
📱 Topics Covered:
- Requesting Permissions in Android 13
- Checking for Permission Status
- Handling Multiple Permission Requests
- Best Practices for Permission Management
- Implementing Permission Rationale
- Managing Permission Callbacks
- Streamlining User Experience
- Security Considerations
- Compatibility with Android 13
All Codes :
 public class MainActivity extends AppCompatActivity {  
   
   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
   
     findViewById(R.id.userPermission).setOnClickListener(view -> {  
       myPermissions();  
     });  
   
   
   } // onCreate method end here ==================  
   
   private final ActivityResultLauncher<String[]> requestPermissionLauncher =  
       registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), permission ->{  
         boolean allGranted = true;  
   
         for (Boolean isGranted : permission.values()){  
           if (!isGranted){  
             allGranted = false;  
             break;  
           }  
         }  
   
         if (allGranted){  
           // All is granted  
         } else {  
           // All is not granted  
         }  
   
       });  
   
   private void myPermissions(){  
   
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){  
   
       String[] permissions = new String[]{  
           android.Manifest.permission.READ_MEDIA_IMAGES,  
           android.Manifest.permission.READ_MEDIA_AUDIO,  
           android.Manifest.permission.READ_MEDIA_VIDEO,  
           android.Manifest.permission.CAMERA,  
       };  
   
   
       List<String> permissionsTORequest = new ArrayList<>();  
       for (String permission : permissions){  
         if (ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){  
           permissionsTORequest.add(permission);  
         }  
       }  
   
       if (permissionsTORequest.isEmpty()){  
         // All permissions are already granted  
         Toast.makeText(this, "All permissions are already granted", Toast.LENGTH_SHORT).show();  
   
   
       } else {  
         String[] permissionsArray = permissionsTORequest.toArray(new String[0]);  
         boolean shouldShowRationale = false;  
   
         for (String permission : permissionsArray){  
           if (shouldShowRequestPermissionRationale(permission)){  
             shouldShowRationale = true;  
             break;  
           }  
         }  
   
         if (shouldShowRationale){  
           new AlertDialog.Builder(this)  
               .setMessage("Please allow all permissions")  
               .setCancelable(false)  
               .setPositiveButton("YES", new DialogInterface.OnClickListener() {  
                 @Override  
                 public void onClick(DialogInterface dialogInterface, int i) {  
                   requestPermissionLauncher.launch(permissionsArray);  
                 }  
               })  
   
               .setNegativeButton("NO", new DialogInterface.OnClickListener() {  
                 @Override  
                 public void onClick(DialogInterface dialogInterface, int i) {  
                   dialogInterface.dismiss();  
                 }  
               })  
               .show();  
   
         } else {  
           requestPermissionLauncher.launch(permissionsArray);  
         }  
   
   
       }  
   
   
     } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  
       String[] permissions = new String[]{  
           android.Manifest.permission.READ_EXTERNAL_STORAGE,  
       };  
   
   
       List<String> permissionsTORequest = new ArrayList<>();  
       for (String permission : permissions){  
         if (ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){  
           permissionsTORequest.add(permission);  
         }  
       }  
   
       if (permissionsTORequest.isEmpty()){  
         // All permissions are already granted  
         Toast.makeText(this, "All permissions are already granted", Toast.LENGTH_SHORT).show();  
   
   
       } else {  
         String[] permissionsArray = permissionsTORequest.toArray(new String[0]);  
         boolean shouldShowRationale = false;  
   
         for (String permission : permissionsArray){  
           if (shouldShowRequestPermissionRationale(permission)){  
             shouldShowRationale = true;  
             break;  
           }  
         }  
   
         if (shouldShowRationale){  
           new AlertDialog.Builder(this)  
               .setMessage("Please allow all permissions")  
               .setCancelable(false)  
               .setPositiveButton("YES", new DialogInterface.OnClickListener() {  
                 @Override  
                 public void onClick(DialogInterface dialogInterface, int i) {  
                   requestPermissionLauncher.launch(permissionsArray);  
                 }  
               })  
   
               .setNegativeButton("NO", new DialogInterface.OnClickListener() {  
                 @Override  
                 public void onClick(DialogInterface dialogInterface, int i) {  
                   dialogInterface.dismiss();  
                 }  
               })  
               .show();  
   
         } else {  
           requestPermissionLauncher.launch(permissionsArray);  
         }  
   
   
       }  
   
   
     }  
   
   
   } // myPermissions end here ================  
   
   
 } // public class end here =========================  

 
 
 
 
