为什么我不能在Environment.DIRECTORY_PICTURES中创建目录?

6
这是我的代码。
File selfieLocation = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES),
               "Daily Selfies");
boolean isDirectory = false;
if(!selfieLocation.isDirectory()) {
        //Creates directory named by this file
        selfieLocation.mkdir();
        isDirectory = selfieLocation.isDirectory();
 }
 //array of strings 
 for(String selfiePath: selfieLocation.list()) {
        selfies.add(selfiePath);
 }

基本上,我想做的是在标准目录内创建自己可定制的目录,以放置用户可用的图片。我查看了相关线程并看到了这个:Android: unable to create a directory in default pictures folder。但是,我确保我调用了getExternal...,而不仅仅是将Environment.DIRECTORY_PICTURES作为参数。我还在这里看到了http://developer.android.com/guide/topics/data/data-storage.html#filesExternal,并且看到我有正确的方法调用/格式来创建外部存储器中的可定制文件夹。文档示例如下:
File file = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
    Log.e(LOG_TAG, "Directory not created");
}

我逐步检查了代码,发现即使在调用selfieLocation.mkdir()后,本地变量isDirectory仍保持为false。有人知道为什么无法创建此目录吗?

1个回答

5
尝试使用File#mkdirs()创建目录,而不是File#mkdir()。后者假设所有父目录都已存在,因此如果任何一个父目录不存在,则不会创建目录。
此外,请查看AndroidManifest.xml中的权限。您需要以下权限才能读/写外部存储器上的内容:
<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    ...
</manifest>

android.permission.READ_EXTERNAL_STORAGE目前还不是必需的,但在Android未来的版本中将会是必需的。请参考此网页


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - committedandroider
顺便问一下,如果您认为这是一个好问题,能否给它点个赞?我有可能会被禁言,所以我现在尽量确保自己提出的问题都经过了研究。 - committedandroider
我已经尝试重现您的错误,但模拟器上一切都正常。问题肯定出在其他地方。 每当我看到一个可能对我有趣的问题时,我都会点赞。这是一个好问题,有研究努力,但从我的角度来看并不有趣。 - aga
是的,问题在于当我将手机插入电脑的 USB 时,我的手机外部媒体甚至没有挂载。这真令人沮丧。 - committedandroider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接