我知道这个话题已经过积极讨论,但我找不到合适的答案。我正在创建一个简单的文件浏览器作为我的应用程序的一部分,目前我对android文件系统完全感到困惑。
第一个问题:我在LG Nexus 5上进行了测试,当然没有物理SD。 Environment.getExternalStorageDirectory()
返回 / storage / emulated / 0 ,我可以使用此路径列出我的所有目录和文件。但现在魔术开始了:
使用shell我可以找到具有相同内容的2个目录( / emulated / legacy 和 sdcard0 )(与使用Environment.getExternalStorageDirectory()
时的结果相同)。但是没有 ../ emulated / 0 路径,这是由上述方法给出的o.0这到底是什么意思?
第二个问题:据我所知,找到物理SD卡的唯一方法是找到不同制造商使用的路径列表,并检查它们是否存在。那是对的吗?
答案 0 :(得分:0)
是的,Environment.getExternalStorageDirectory()
会返回设备上“主要”共享存储空间顶部的路径,许多设备会选择在内部存储空间上进行模拟。
从KitKat开始,您可以通过Context.getExternalFilesDirs()
和Context.getExternalCacheDirs()
访问“辅助”共享存储设备。 support-v4包中还有这些API的向后兼容版本。
请注意,目前没有用于确定辅助存储设备的顶级路径的API。如果绝对需要,您可以通过逐个删除父目录来推导它们,直到Environment.getStorageState()
返回MEDIA_UNKNOWN
。
除了这些公共API之外,您通过探索procfs等发现的任何其他详细信息都是可能在未来的Android版本中更改的实现细节。例如,由于共享存储分离如何在多用户设备上使用Linux安装命名空间,因此存在重复的安装点。更多技术细节:
http://source.android.com/devices/tech/storage/index.html#multi-user-external-storage