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

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

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

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

Solutions Collecting From Web of "当没有安装SD卡时,Environment.getExternalStorageDirectory()是否返回一个可用的数据文件夹?"

public static File getExternalStorageDirectory ()

在API级别1中添加

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

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

编辑:

我觉得不同的设备。

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

更多信息 @

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

我不会推荐以下。 我曾经与commonsware讨论过这个问题,build议不要使用下面的内容。 但是你可以使用下面的testing目的。

 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); } 

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

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

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

我无法在很多设备上尝试,但从我所看到的情况来看,这种方法是一个“制造商依赖的答案”。

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