Как программно отобразить скрытую папку, начинающуюся с точки, содержащую видеофайл из внутреннего хранилища Android?

#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. Далее: Пусть приложение само создаст папку и файл. Пусть файл будет отсканирован сканером мультимедиа (в противном случае файл не будет виден в хранилище мультимедиа). Затем вы увидите свой файл, даже если он находится в «скрытой» папке. И что такое «вручную»?