MediaStore — удалить файл после скрытия папки

#android #mediastore

#Android #mediastore

Вопрос:

Я работаю MediaStore напрямую и добавляю / удаляю файлы оттуда всякий раз, когда мое приложение добавляет / удаляет файлы. Я хочу быстрые и мгновенные MediaStore обновления и поддержку пакетных операций, вот почему я это делаю. Вот пример операции добавления:

 Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
File f = new File(path);
ContentValues values = new ContentValues(7);
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
values.put(MediaStore.Images.Media.DATE_TAKEN, dateTaken);
values.put(MediaStore.Images.Media.DATE_MODIFIED, dateModified / 1000L);
values.put(MediaStore.Images.Media.MIME_TYPE, ExtensionUtil.getMimeType(fileName));
values.put(MediaStore.Images.Media.ORIENTATION, rotation);
values.put(MediaStore.Images.Media.DATA, filePath);
if (latitude != null || longitude != null)
{
    values.put(MediaStore.Images.Media.LATITUDE, latitude);
    values.put(MediaStore.Images.Media.LONGITUDE, longitude);
}
ContentProviderOperation operation = ContentProviderOperation.newInsert(uri)
            .withValues(values)
            .build()
  

Вот операция удаления:

 String columnData = MediaStore.Images.Media.DATA;
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentProviderOperation operation = ContentProviderOperation.newDelete(uri)
            .withSelection(columnData   "=?", new String[]{path})
            .build();
  

С помощью такого рода операций я могу обрабатывать все случаи и выполнять их пакетами по своему усмотрению.

Проблема

Скрыть папку. Если я скрываю папку, я создаю в ней файл .nomedia, после чего я хочу удалить записи всех медиафайлов в нем из MediaStore , НО, конечно, СОХРАНИТЬ файлы в хранилище. Есть идеи, как я мог бы создавать операции, которые также не удаляют файл?

Я не хочу использовать MediaScanner , я оптимизирую скорость, и мне нужны операции, чтобы я мог вызывать многие из них в пакете, если это возможно…

Комментарии:

1. Просто выключите / включите устройство.

2. if (latitude != null || longitude != null) . Если только одно значение равно нулю, вы все равно помещаете их оба.

3. Я пишу программное обеспечение для пользователей.. Выключение телефона не является решением… Предполагается, что я не хочу использовать данные, которые уже присутствуют. Мой код позаботится обо всем, где это необходимо, даже о недопустимых метаданных…

4. Вы можете направить MediaScanner только в свой каталог. Почему это будет недостаточно быстро?

5. Это НАМНОГО медленнее, чем работа в медиа-магазине. Если вы хотите переместить папку с 1000 файлами, operations batch работает почти мгновенно, MediaScanner работает намного медленнее… Как я уже сказал, я хочу получить максимальную отдачу от этого в смысле скорости. И мне нужно заблокировать рабочий поток до завершения сканирования, так как мне нужны данные из результата … это работает, но пример с перемещением файлов показывает мне значительные различия в скорости…