1

设备 1

/sdcard连接到真正的 SD 卡

/mnt/sdcard连接到真正的 SD 卡

设备 2

/sdcard连接到内部存储器

/mnt/sdcard连接到内部存储器

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

. .

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

我的问题是,我怎么知道它们是否附加到同一个目录?

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

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

4

3 回答 3

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()

由于较新版本的 android 分区本身的方式,您不能总是从代码访问外部 SD 卡。这是直接来自android开发网站的声明:

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

于 2013-07-23T00:11:34.290 回答
2
new File("/sdcard").getCanonicalPath().equals(new File("/mnt/sdcard").getCanonicalPath())

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

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

于 2013-07-23T00:29:36.120 回答
0

连接到真正的 SD 卡

Android SDK,目前还没有“真正的sd卡”的概念。有外部存储。外部存储所在位置的定义取决于设备制造商。

连接到内部存储器

这些路径充其量是指外部存储,最坏的情况是不存在。

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

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

于 2013-07-23T00:12:50.503 回答