有没有可靠的方法来查找物理SD卡的路径

时间:2014-03-16 15:16:55

标签: android filesystems storage

我知道这个话题已经过积极讨论,但我找不到合适的答案。我正在创建一个简单的文件浏览器作为我的应用程序的一部分,目前我对android文件系统完全感到困惑。

第一个问题:我在LG Nexus 5上进行了测试,当然没有物理SD。 Environment.getExternalStorageDirectory()返回 / storage / emulated / 0 ,我可以使用此路径列出我的所有目录和文件。但现在魔术开始了:

使用shell我可以找到具有相同内容的2个目录( / emulated / legacy sdcard0 )(与使用Environment.getExternalStorageDirectory()时的结果相同)。但是没有 ../ emulated / 0 路径,这是由上述方法给出的o.0这到底是什么意思?

enter image description here

enter image description here

第二个问题:据我所知,找到物理SD卡的唯一方法是找到不同制造商使用的路径列表,并检查它们是否存在。那是对的吗?

1 个答案:

答案 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