Android mkdirs () устанавливает недопустимые разрешения, блокирует другие приложения из папки - PullRequest
3 голосов
/ 04 декабря 2011

Я работаю над программой организации файлов мультимедиа для Android и хочу переместить файлы мультимедиа в структуру каталогов, такую ​​как root / Artist / Album / Song.flac.Я перебираю структуру данных, содержащую эту информацию, и создаю папки, используя mkdirs ().Когда я просматриваю созданные папки (используя OI File Manager или File Expert), я могу войти в каталог первого уровня и увидеть имена каталогов второго уровня, но они обозначены как 0-байтовые файлы.Сначала я подумал, что это действительно просто файлы, и попробовал еще раз, но если я просмотрю их в ADB, они будут файлами.Проблемы с разрешениями:

Например, у меня есть мой корень в / mnt / storage / FLAC:

ls -l
drwxrw-rw-   4   app_63   app_63   16 Dec 3 20:42 Artist_1
drwxrw-rw-   3   app_63   app_63   16 Dec 3 20:42 Artist_2
...

Каталоги второго уровня (/ mnt / storage / FLAC / Artist_1 и т. Д.) имеют одинаковые разрешения для папок Альбома.

Если я вручную отредактирую разрешения с помощью chmod, установив для обеих папок уровня значение drwxrwxrwx (777), я могу перемещаться по ним и воспроизводить файлы в файловом менеджере.Это можно сделать с помощью chmod + x.

Вот код, который я использую:

public void organizeFiles(String rootDir, ArrayList<libraryElementArtist> libraryData)
{
    for(int i = 0; i < libraryData.size(); i++)
    {
        //create artist folder
        //{
        //    (new File(rootDir + File.separator + libraryData.get(i).name)).mkdirs();
        //}
        for(int j = 0; j < libraryData.get(i).albums.size(); j++)
        {
            //create album folder
            (new File(rootDir + File.separator + libraryData.get(i).name + File.separator + libraryData.get(i).albums.get(j).name + File.separator)).mkdirs();
            for(int k = 0; k < libraryData.get(i).albums.get(j).songs.size(); k++)
            {
                //move song into folder
                FileOperations.moveFile(libraryData.get(i).albums.get(j).songs.get(k).filename, rootDir + "/" + libraryData.get(i).name + "/" + libraryData.get(i).albums.get(j).name);
            }
        }
    }
}

Это функция moveFile:

public static boolean moveFile(String sourcefile, String dest)
{
    File file = new File(sourcefile);
    File dir = new File(dest);
    return file.renameTo(new File(dir, file.getName()));
}

У меня естьэта строка в моем файле манифеста:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

На моем устройстве 16 ГБ внутренней памяти ext3.Как мне добавить это исправление разрешений в мой код?

1 Ответ

0 голосов
/ 04 декабря 2011

В манифесте приложения требуется следующее разрешение:

android.permission.WRITE_EXTERNAL_STORAGE

Ref:

Хранение

...