Environment.getExternalStorageDirectory不返回可移动存储的路径

sky*_*ler 40 android

从API级别8开始,Android似乎重新定义了"外部"存储.通过http://developer.android.com/reference/android/os/Environment.html阅读,附在文档中getExternalStorageDirectory我看到评论:"不要在这里混淆'外部'一词.这个目录可以更好被认为是媒体/共享存储......在具有多个"外部"存储目录的设备中......,该目录代表用户将与之交互的"主要"外部存储."

我的应用程序将文件写入获取的路径getExternalStorageDirectory,并且我已经让用户请求选择写入他们的可移动SD卡.我一直认为它getExternalStorageDirectory返回了可移动SD卡的路径,但这已不再适用.如何访问此SD卡的路径?

Ale*_*dam 33

根据消息来源,getExternalStorageDirectory实现返回设备环境中设置为"外部存储"的任何内容:

public static File getExternalStorageDirectory() {
    return EXTERNAL_STORAGE_DIRECTORY;
}
Run Code Online (Sandbox Code Playgroud)

EXTERNAL_STORAGE_DIRECTORY是:

private static final File EXTERNAL_STORAGE_DIRECTORY
        = getDirectory("EXTERNAL_STORAGE", "/sdcard");

static File getDirectory(String variableName, String defaultPath) {
    String path = System.getenv(variableName);
    return path == null ? new File(defaultPath) : new File(path);
}
Run Code Online (Sandbox Code Playgroud)

相反,getExternalStoragePublicDirectory(String type)需要以下其中一个字符串:

DIRECTORY_MUSIC,DIRECTORY_PODCASTS,DIRECTORY_RINGTONES,DIRECTORY_ALARMS,DIRECTORY_NOTIFICATIONS,DIRECTORY_PICTURES,DIRECTORY_MOVIES,DIRECTORY_DOWNLOADS或DIRECTORY_DCIM.不能为空.

所以它并不意味着返回SD卡根.

替代:

最后,getExternalStorageState()将返回挂载的文件系统/mnt/sdcard/.根据CommonsWare在这个答案:找到外部SD卡位置,没有办法直接获取外部SD卡(如果它甚至存在).

另一种方法是检查isExternalStorageRemovable ()并提供手动选项,如果它是错误的.

  • 我同意@Caner.这个答案没有回答这个问题:我们如何找到可移动存储位置.我一直在寻找各地,但当我在三星设备上测试时,每台设备都返回内部存储位置.如何找到*可移动*SD卡的路径? (7认同)
  • 对不起 - 我删除了它并提供了一条编辑消息,说明我已删除它,但我想编辑消息没有显示?由于无法获得可移动SD卡的位置,如果存在,那么像Atrix这样的手机中SD卡插槽的用途是什么?它是否仅用于在安装到计算机(如拇指驱动器)时存储数据? (2认同)
  • 这个答案并没有真正回答任何问题 (2认同)