当没有安装SD卡时,Environment.getExternalStorageDirectory()是否返回可用的数据文件夹?

想象一下没有sd内存的Android设备。 只有自己的内存。

我不确定在这种情况下Environment.getExternalStorageDirectory()返回什么。

空或内部存储器位置对永久数据存储有效吗?

public static File getExternalStorageDirectory()

在API级别1中添加

获取Android外部存储目录。 如果用户已在其计算机上安装此目录,已从设备中删除该目录或发生其他一些问题,则该目录当前可能无法访问。 您可以使用getExternalStorageState()确定其当前状态。

注意 :这里不要混淆“外部”这个词。 此目录可以更好地被视为媒体/共享存储。 它是一个文件系统,可以容纳相对大量的数据,并在所有应用程序之间共享(不强制执行权限)。 传统上,这是一张SD卡,但它也可以在与受保护的内部存储不同的设备中实现为内置存储,并且可以作为文件系统安装在计算机上。

我认为不同的设备不同。

我有一个三星Galaxy S3 Environment.getExternalStorageDirectory()返回sdCard0 ,这是内部存储内存的路径。

更多信息 @

http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

我不会推荐以下内容。 我和Commonsware讨论了这个问题,建议不要使用下面的内容。 但您可以使用以下内容进行测试。

 String externalpath = new String(); String internalpath = new String(); public void getExternalMounts() { Runtime runtime = Runtime.getRuntime(); try { Process proc = runtime.exec("mount"); InputStream is = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(is); String line; BufferedReader br = new BufferedReader(isr); while ((line = br.readLine()) != null) { if (line.contains("secure")) continue; if (line.contains("asec")) continue; if (line.contains("fat")) {//external card String columns[] = line.split(" "); if (columns != null && columns.length > 1) { externalpath = externalpath.concat("*" + columns[1] + "\n"); } } else if (line.contains("fuse")) {//internal storage String columns[] = line.split(" "); if (columns != null && columns.length > 1) { internalpath = internalpath.concat(columns[1] + "\n"); } } } } catch(Exception e) { e.printStackTrace(); } System.out.println("Path of sd card external............"+externalpath); System.out.println("Path of internal memory............"+internalpath); } 

在我的手机上的cyanogenmod内核(android 4.1)上,无论是否插入SD卡, Environment.getExternalStorageDirectory() 始终返回内部存储。 还有一些手机根本不支持外部SD卡(例如Google Nexus 4)。

总的来说,结果将取决于实现,您不能依赖此调用重新调整内部存储或SD卡。 类似地,当SD卡不存在时的呼叫结果也将依赖于实现(即,每个设备不同)。 从您的应用程序的角度来看,您将其视为一个持久应用数据的地方。

这将取决于目标真实设备。 一些(如华硕Nexus 7或三星Galaxy S [1-3]将发送其内部存储文件夹。在其他一些设备上它可以返回null或空。

我无法在很多设备上试用它,但从我看到的那个方法来说,这个方法很多是“制造商相关的答案”。

正式地它应该返回非系统一的存储。 (SDCard或内部“焊接存储器”,它是内部核心存储器的补充)。