为什么在我的Android设备上/ mnt下面有两个文件夹sdcard和sdcard2

时间:2013-09-30 05:59:48

标签: android

当使用Eclipse文件浏览器浏览我的android目录时,我看到了mnt/sdcardmnt/sdcard2,见下图:

调用Environment.getExternalStorageDirectory()时会返回mnt/sdcard,因此我认为mnt/sdcadexternal storagemnt/sdcard2是我的实际SD卡,是真的?我如何使用代码访问mnt/sdcard2下的文件?

enter image description here

P.S。

似乎我可以直接访问外部SD卡:

    File extStorageDir = Environment.getExternalStorageDirectory();
    String parent = extStorageDir.getParent();
    File extSdCardDir = new File(parent+"/sdcard2");

    File file = new File(extSdCardDir, "DemoFile.jpg");

但我不知道额外的SD卡会在其他情况下改名。

1 个答案:

答案 0 :(得分:1)

您是对的,getExternalStorage将返回您的内置外部存储空间。不幸的是,如果该设备还具有内置存储器和SD卡,则Jelly Bean应用程序不再能够使用SD卡。您可以尝试通过shell命令或硬编码路径来解决它,但是没有root,就没有可靠的方法来访问它了。

这是最近添加的Android CTS,所有OEM必须遵守这些才能使用Play商店。

Compatibility Program Overview | Android Developers

Section 9.5 (pg. 34) of Android 4.3 Compatibility Definition

  

包含多个外部存储路径的设备实施   绝不允许Android应用程序写入辅助外部   存储

Storage Options | Android Developers

  

设备可能使用内部存储分区   对于外部存储器也可以提供SD卡插槽。在这种情况下,   SD卡不是外部存储的一部分,您的应用程序不能   访问它(额外的存储仅用于用户提供的媒体   系统扫描)。

Android 4.2 APIs | Android Developers

  

在多用户环境中保存数据

     

每当您的应用保存用户首选项,创建数据库或   将文件写入用户的内部或外部存储空间,即   只有在以该用户身份运行时才能访问数据。

     

确保您的应用在多用户中正常运行   环境,不要引用您的内部应用程序目录或外部   存储位置使用硬编码路径,而是始终使用   适当的API:

For access to internal storage, use getFilesDir(), getCacheDir(), or openFileOutput().
For access to external storage, use getExternalFilesDir() or getExternalStoragePublicDirectory(). 
     

无论您使用哪种API来保存给定用户的数据,   以其他用户身份运行时,无法访问这些数据。   从您的应用程序的角度来看,每个用户都在完全运行   单独的设备。