Как удалить несколько файлов одновременно в Android 11

#java #android #scoped-storage

Вопрос:

Я хочу удалить все видеофайлы из одной конкретной папки, я знаю, что Android 11 использовал хранилище с областью действия, поэтому, если мое приложение не создает эти файлы, мне нужно запросить разрешение.

что я сделал, так это нашел в Интернете пример, в котором показано, как удалять файлы в хранилище с ограниченной областью. Во всех этих примерах есть такой тип запроса на удаление кода -gt; создает исключение (безопасность) — gt; gt; crateDeleteRequest -gt;gt;gt; если пользователь позволяет -gt;gt;gt;gt; затем удалите файлы

 ContentResolver contentResolver = requireActivity().getContentResolver();   try {   //delete object using resolver "Here!!!!!!!!!"  contentResolver.delete(uri, null, null);   } catch (SecurityException e) {   PendingIntent pendingIntent = null;    ArrayListlt;Urigt; collection = new ArrayListlt;gt;();  collection.add(uri);  pendingIntent = MediaStore.createDeleteRequest(contentResolver, collection);    if (pendingIntent != null) {  IntentSender sender = pendingIntent.getIntentSender();  IntentSenderRequest request = new IntentSenderRequest.Builder(sender).build();  launcher.launch(request);  }   }  

Приведенный выше код принимает в качестве параметра только «один uri видео» и запрашивает у пользователя разрешение на его удаление. Я хочу удалить несколько файлов, чтобы я написал этот запрос

 ContentResolver resolver = requireActivity().getContentResolver();   // URI of the image to remove.  Uri uriCollection;  if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.Q) {  uriCollection = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);  } else {  uriCollection = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;  }   // WHERE clause.  String selection = MediaStore.Video.Media.BUCKET_ID   " = ? ";  String[] selectionArgs = new String[]{String.valueOf(videoFolder.getId())};   // Perform the actual removal.  int numVideoFilesRemoved = 0;  try {  numVideoFilesRemoved = resolver.delete(  uriCollection,  selection,  selectionArgs);   }  

Приведенный выше код принимает модель видеозаполнителя в качестве параметра и извлекает из нее идентификатор bucket_id для этой папки и удаляет все записи из хранилища мультимедиа с тем же идентификатором, предполагается, что он работает, но он не работает и возвращает только 0 (в «numVideoFilesRemoved» означает, что запись не удалена) и не создает восстанавливаемое исключение безопасности, которое является моей проблемой. я попробовал тот же код выше в Android 5,6,9. все они работают нормально, кроме 10 и 11