/sdcard/emulated/0 和 /sdcard 之间的区别

Posted

技术标签:

【中文标题】/sdcard/emulated/0 和 /sdcard 之间的区别【英文标题】:differences between /sdcard/emulated/0 and /sdcard 【发布时间】:2013-11-29 19:31:35 【问题描述】:

我对一个奇怪的问题很生气。如果我在我的代码中创建一个文件夹为

directory_path = Environment.getExternalStorageDirectory()
                + "/" + context.getResources().getString(R.string.app_name);

directory = new File(directory_path);
if (!directory.exists()) 
    directory.mkdirs();

在 /sdcard/ 中创建了一个新文件夹。如果我尝试在 logcat directory_path 变量上打印,则路径不同:/storage/emulated/0/ 如果我去那个路径,我发现另一个文件夹与 /sdcard/ 上创建的文件夹同名。这对我来说是个问题,因为当我尝试将一些数据写入该文件夹时,所有内容都进入 /storage/emulated/0 上的一个,而另一个(即我想要使用的文件夹)保持为空。 为什么?

【问题讨论】:

您找到答案了吗?似乎 Environment.getExternalStorageDirectory().getPath() 在 4.2 上不起作用 【参考方案1】:

/storage/emulated/0/:据我所知,这是指“模拟 MMC”(“所有者部分”)。通常这是内部部分。“0”代表 对于这里的用户,“0”是第一个用户,也就是设备所有者。如果你 创建更多用户,这个数字将随着每个用户增加。

/storage/emulated/legacy/ 和之前一样,但指向的部分 当前工作的用户(对于所有者,这将是

的符号链接

/storage/emulated/0/)。所以这条路径应该把每个用户带到他的 “部分”。

/sdcard/:根据 Shywim 的评论,这是指向...的符号链接。

/mnt/sdcard (android

/storage/sdcard0 (Android 4.0+)

更多详情您可以访问stackexchange

【讨论】:

【参考方案2】:

您是否尝试过读回数据? /storage/emulated/0/ 是 JB 中引入的新路径,用于支持平板电脑上的多个用户。但只要您使用Environment.getExternalStorageDirectory() 访问外部文件,它们的实际驻留位置并不重要。

这里有一些附加信息:https://android.stackexchange.com/questions/35541/why-did-sdcard-turn-into-sdcard-0-with-4-2

【讨论】:

好的,但是我怎样才能在我的应用程序上跳过这种差异化呢?我不想使用 /storage/emulated/0 ,但是我在 /storage 中为我的应用程序创建的文件夹 /storage/emulated/0 下的文件夹你应该使用的存储空间。

以上是关于/sdcard/emulated/0 和 /sdcard 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

SDC设计约束——其他SDC命令

SDC设计约束——其他SDC命令

用perl对sdc进行预处理

sdc docker连接

附录A:SDC

SDC设计约束——时钟相关约束