У меня есть изображения, которые считываются с SD-карты только конкретным приложением, поэтому я хочу скрыть его из галереи изображений. Я поместил в него файл .nomedia, но этот файл игнорируется, изображения все еще отображаются в Галерее. Я положил его с помощью "." в начале. Все еще не работает. Любые идеи?
Android -.nomedia не работает для изображений
Ответ 1
Я предполагаю, что вы используете Android 4.0, так как .nomedia
функционирует должным образом до тех пор. Отчет об ошибке AOSP объясняет:
MediaScanner
на Android 4.0 не удается забыть уже проиндексированные файлы, когда он встречает файл .nomedia
, но он чтит его, если он присутствует на первом проходе. Поэтому обходным путем является просто переименование каталога. Конечно, вы можете изменить имя после следующего сканирования, если хотите.
Обновление. Я полагаю, что полное решение было бы на самом деле принудительным сканирование носителей после переименования каталога. Я не пробовал, но что-то вроде этого должно сделать трюк:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
Environment.getExternalStorageDirectory())));
Ответ 2
Хорошо... Я признаю, что я только догадываюсь, но поскольку в комментарии есть +1, я дам ему вихрь в качестве ответа. Поскольку это ваше собственное приложение, измените расширение файла изображения на что-то совершенно уникальное ".myimagefile", например, и посмотрите, скрывает ли это его от Android. Тем временем вы знаете, какие файлы загружать в свое приложение и как их сохранять.
Ответ 3
Ошибка .nomedia верна, и вы можете добавить ее в ранее существующую папку с изображениями.
Вы можете заставить галерею повторно проиндексировать после создания файла .nomedia, переименовав папку, запустив галерею (теперь должна исчезнуть "скрытая папка" ) и переименуйте папку обратно в нужное вам место. скрытый.
Я просто сделал это снова, чтобы убедиться, что он работает на моем телефоне. Android 4.0.4.
Ответ 4
Здесь я нашел себя:
Однако небольшое изменение этого метода:
- Загрузите и установите SDRescan приложение
- Очистить данные для приложения Галерея
- Очистить данные для приложения Media Storage
- Откройте приложение SDRescan, загруженное с шага 1
SDCard следует повторно отсканировать, и все каталоги, содержащие файлы .nomedia, должны быть проигнорированы на этом этапе.
Ответ 5
Файл .nomedia
является превентивным, а не целебным (в Android 4.0), и это ошибка.
Если у вас есть файл .nomedia
, и изображения уже находятся в нем, Галерея все равно будет искать изображения.
Вам нужно создать файл .nomedia
, прежде чем вставлять в него изображения.
Изменить: все папки, начинающиеся с точки, не сканируются (потому что скрыты).
Ответ 6
На моей карте памяти у меня есть тысячи фотографий, которые подавляют медиа-сканер. Затем в корневой папке на моей карте памяти, переименованной из "RootFolder" в ".RootFolder"
Стал скрытым каталогом и не использовал больше .nomedia
Попробуйте это.
Ответ 7
В Media Storage 4.1.1 на моем Samsung Galaxy Note 2 ни один из приведенных выше трюков не работает полностью, в этом смысле: каталоги, содержащие файлы .nomedia, все еще сканируются, что может сильно разрядить батарею (хотя результат игнорируется в галерее), а также каталоги с именами, начинающимися с символа '.' все еще сканируются:-( Я прибегал к использованию приложения "Media Scanner Root", которое позволяет полностью отключить скрупулезный медиа-сканер. По-видимому, это достигается чем-то вроде
pm disable com.android.providers.media/com.android.providers.media.MediaScannerReceiver
Кстати, отключение/замораживание самого приложения Media Storage плохо влияет на то, что выбор и привязка мелодий и уведомлений больше не работает (какой прекрасный дизайн), но когда отключается только его компонент сканера, все равно можно использовать, например, ES File Explorer для выбора тонов.
Ответ 8
Вы можете использовать библиотеку расширения расширения APK (требуется уровень API 5 или выше) для чтения файлов, которые вы установили на SD-карту, как часть архива Zip. Описание этой библиотеки можно найти здесь:
http://developer.android.com/guide/market/expansion-files.html#ZipLib
Предположительно, файлы, хранящиеся в ZIP-архиве на вашей SD-карте, не будут отображаться в Галерее.
Кроме того, если у вас есть изображения, которые ваше приложение читает (но не записывает) на SD-карту, и это должно быть доступно только вашему собственному приложению, и это может быть доставлено, когда ваше приложение установлено или обновлено, то имеет смысл воспользоваться новым средством Google Play, чтобы включить их в состав вашего приложения, когда оно установлено.
Я предполагаю, что вы сохраняете свои изображения на SD-карте, потому что они слишком велики, чтобы вписаться в ваш APK файл (учитывая его ограничение на 50 МБ, которое даже меньше, чем на практике для определенных устройств, из-за буферизации вопросы).
Если это так, то вы можете подумать, что Google Play с 3/5/2012 поддерживает вложение (к вашему приложению) до двух "файлов расширения" объемом до 2 гигабайт каждый. APK по-прежнему имеет максимум 50 МБ, но файлы расширения увеличивают общее хранилище до 4 ГБ. Эти файлы расширений предоставляются вам Google, и они поддерживаются в определенной папке SD-карты, специфичной для вашего приложения, и могут быть доступны с помощью API, предоставляемого библиотекой Downloader (требуется уровень API 5 или выше).
Вот объявление Google об этом изменении:
http://android-developers.blogspot.in/2012/03/android-apps-break-50mb-barrier.html
И вот подробное описание объекта:
http://developer.android.com/guide/market/expansion-files.html
Обратите внимание, что, хотя этот объект является новым, библиотеки поставляются с Android SDK для использования с более ранними уровнями API. Например, при моей установке я нахожу здесь версии API-8:
<Android SDK base folder>\extras\google\play_apk_expansion\
В эту же папку входит упомянутая выше Zip-библиотека расширения APK в подпапке zip_file.
Я лично не использовал это средство самостоятельно, и поэтому описываю это, основываясь исключительно на цитируемых ссылках.
Ответ 9
Галерея не обновляется так часто, и некоторые миниатюры все еще отображаются в представлении. Для этого вам нужно перезагрузить телефон или программно обновить галерею, выполнив следующий код.
/**
* This method is must to reflect changes on gallery, if some file is
* deleted or moved, <b> no updation is shown on gallery till phone is
* rebooted </b> or <i>till this method UpdateGallery(Activity activity) is
* called</i> UpdateGallery
*/
public static void UpdateGallery(Activity activity) {
activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
.parse("file://" + Environment.getExternalStorageDirectory())));
}