/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 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章