【问题标题】:Android mkdirs() sets invalid permissions, locks other apps out of folderAndroid mkdirs() 设置无效权限,将其他应用锁定在文件夹外
【发布时间】:2012-01-12 11:06:47
【问题描述】:

我正在为 Android 开发一个媒体文件组织程序,我想将媒体文件移动到一个目录结构中,例如 root/Artist/Album/Song.flac。我正在遍历包含此信息的数据结构并使用 mkdirs() 创建文件夹。当我浏览创建的文件夹(使用 OI 文件管理器或文件专家)时,我可以进入一级目录并查看二级目录的名称,但它们被指示为 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" />

我的设备上的存储空间为 16GB 内部 ext3。我应该如何将此权限修复添加到我的代码中?

【问题讨论】:

  • 这个rootDir总是在SD卡上?

标签: android permissions filesystems mkdir ext3


【解决方案1】:

您需要在您的 App Manifest 中获得以下权限:

android.permission.WRITE_EXTERNAL_STORAGE

参考:

Storage

【讨论】:

  • 抱歉,我的清单文件中已经有这个,但格式使它隐藏在我的问题中。我已经编辑了我的问题。问题不在于它无法创建目录,而在于它使用错误的权限创建了它(目录创建得很好,并且根 shell 一切都很完美,只是其他应用程序没有使用它的权限)。
猜你喜欢
  • 2019-03-09
  • 2011-05-14
  • 2014-09-28
  • 1970-01-01
  • 2021-09-30
  • 2023-01-06
  • 2015-10-18
  • 2013-05-11
  • 2023-03-28
相关资源
最近更新 更多