比较SD卡路径

时间:2013-07-23 00:03:26

标签: android

设备1

/sdcard附加到真正的SD卡

/mnt/sdcard附加到真正的SD卡

设备2

/sdcard附加到内部记忆

/mnt/sdcard附加到内部记忆

/external_storage(类似这样的)到真正的SD卡

/sdcard/mnt/sdcard似乎位置相同。总是?

我的问题是,如何知道它们是否附加到同一目录?

我尝试了new File(path1).equals(new File(path2));,但它返回false。我唯一看到的方法是,创建一个具有唯一ID的隐藏文件,并检查两个路径中是否存在。

PS:我知道Environment.getExternalStorageDirectory()。但我需要这些路径用于某些特定目的。

3 个答案:

答案 0 :(得分:4)

/ sdcard和/ mnt / sdcard并不总是一样的。有许多路径可以存在,例如:

/emmc 
/mnt/sdcard/external_sd
/mnt/external_sd
/sdcard/sd
/mnt/sdcard/bpemmctest
/mnt/sdcard/_ExternalSD
/mnt/sdcard-ext
/mnt/Removable/MicroSD
/Removable/MicroSD
/mnt/external1
/mnt/extSdCard
/mnt/extsd
/mnt/usb_storage <-- usb flash mount
/mnt/extSdCard <-- usb flash mount
/mnt/UsbDriveA <-- usb flash mount
/mnt/UsbDriveB <-- usb flash mount

当它们为其提供功能时,你应该没有理由需要硬编码到内部或外部存储器的直接路径。您所编写的任何硬编码都与您从列出的功能中获得的内容相同,仅适用于特定设备。

这将为您提供外部存储上文件的绝对路径字符串:

String myPath = sdcardEnvironment.getExternalStorageDirectory().getAbsolutePath() + "/folder file is in/file you want path to";

这将为您提供应用程序内部存储的路径:

this.getApplicationContext().getFilesDir()

您无法始终从代码访问外部SD卡,因为较新版本的Android分区本身的方式。这是直接来自android dev网站的声明:

It's possible that a device using a partition of the internal storage for the external storage may also offer an SD card slot. In this case, the SD card is not part of the external storage and your app cannot access it

答案 1 :(得分:2)

new File("/sdcard").getCanonicalPath().equals(new File("/mnt/sdcard").getCanonicalPath())

省略了异常处理和其他细节。但请注意,ObieMD5是正确的,您不应该这样做,正如您在上面答案中的路径列表中所看到的那样。

另请注意,此方法仅解析符号链接;如果您的设备使用mount而不是从两个位置访问相同的空间,则此方法将不起作用。

答案 2 :(得分:0)

  

附在真正的SD卡上

Android SDK目前没有“真正的SD卡”的概念。有external storage。外部存储所在的定义取决于设备制造商。

  

附加到内存

这些路径最多是指外部存储,最糟糕的是不存在。

  

/ sdcard和/ mnt / sdcard似乎有相同的位置。总是?

没有。这些路径甚至可能不存在于某些设备上,因为不要求它们存在,并且现代设备不使用这些路径。始终使用EnvironmentContext上的方法查找外部存储空间的位置。