#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 работает намного медленнее… Как я уже сказал, я хочу получить максимальную отдачу от этого в смысле скорости. И мне нужно заблокировать рабочий поток до завершения сканирования, так как мне нужны данные из результата … это работает, но пример с перемещением файлов показывает мне значительные различия в скорости…