#android #mediastore #android-storage #hidden-files #android-internal-storage
Вопрос:
Я хочу показать скрытую папку с видеофайлом в ней. Я знаю, что папка во внутреннем хранилище на самом деле не скрыта, она не отображается файловыми менеджерами, имена которых начинаются с точки».»
Я использую распознаватель содержимого и хранилище мультимедиа для извлечения всех папок/каталогов, в которых есть видеофайлы. Мой код отлично работает при извлечении папок и файлов с видео, за исключением того, что имя папки не начинается с точки «.» даже когда я вручную создаю имя папки, например «.hidden_folder», и помещаю в нее видеофайл, он все равно не извлекается.
Код, который я использую для извлечения всех видеофайлов:
@RequiresApi(api = Build.VERSION_CODES.O)
public ArrayList<MediaFiles> fetchMedia() {
ArrayList<MediaFiles> mediaFilesArrayList = new ArrayList<>();
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null);
if (cursor != null amp;amp; cursor.moveToNext()) {
do {
String id = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media._ID));
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE));
String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME));
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
String size = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));
String duration = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));
String dateAdded = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATE_ADDED));
MediaFiles mediaFiles = new MediaFiles(id, title, duration, size, dateAdded, path, displayName, false);
int index = path.lastIndexOf("/");
substring = path.substring(0, index);
SharedPreferences sharedPreferences = getSharedPreferences(HIDDEN_VIDEOS_PREFS, MODE_PRIVATE);
if (!allFolderList.contains(substring) amp;amp; sharedPreferences.getString(HIDDEN_VIDEO_KEY substring, "-") == ("-")) {
allFolderList.add(substring); **// This is the list having folders**
}
mediaFilesArrayList.add(mediaFiles);
}
while (cursor.moveToNext());
}
return mediaFilesArrayList; **//This is the list containg vido files**
}
Я создаю приложение для видеоплеера, в котором есть возможность показывать скрытые файлы и папки. Я хочу обыскать все внутреннее хранилище и найти, есть ли какая-либо скрытая папка и есть ли в ней видеофайл.
При изменении имени папки, поставив точку в начале с помощью встроенного файлового менеджера устройства, она не отображается в моем приложении, и когда я переименовываю ее обратно в исходную, просто удалив точку, она отображается.
Есть ли правильный способ получить скрытые папки ?… Я искал везде….но не нашел никакого решения…
Комментарии:
1. Пожалуйста, укажите полный путь к вашей скрытой папке. Также сообщите версию Android используемого устройства.
2. Полный путь к скрытой папке: /хранилище/эмулируется/0/.скрытая папка, а устройство, которое я использую, — Android 11, Api 30
3. Как ваше приложение создало эту папку на внешнем хранилище? На устройстве Android 11 это обычно невозможно для приложения. И ваше приложение тоже поместило туда этот файл? Если ваше приложение не создавало файл, то ваше приложение обычно не будет видеть такие файлы на устройстве Android 11.
4. Я создал папку manaully с помощью встроенного приложения для управления файлами устройств. Если переименовать папку, удалив точку из имени папки, то она отображается в противном случае, если она не отображается в моем приложении
5. Далее: Пусть приложение само создаст папку и файл. Пусть файл будет отсканирован сканером мультимедиа (в противном случае файл не будет виден в хранилище мультимедиа). Затем вы увидите свой файл, даже если он находится в «скрытой» папке. И что такое «вручную»?