想象一下没有sd内存的Android设备。只有自己的内存。
在这种情况下,我不确定Environment.getExternalStorageDirectory()
返回什么。
空或内部存储器位置对永久数据存储有效吗?
答案 0 :(得分:9)
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);
}
答案 1 :(得分:3)
在手机上的cyanogenmod内核(android 4.1)上,无论是否插入SD卡,Environment.getExternalStorageDirectory()
始终都会返回内部存储空间。还有一些手机根本不支持外部SD卡(例如Google Nexus 4)。
总的来说,结果将取决于实现,您不能依赖此调用重新调整内部存储或SD卡。类似地,当SD卡不存在时的呼叫结果也将依赖于实现(即每个设备不同)。从您的应用程序的角度来看,您将其视为一个持久应用数据的地方。
答案 2 :(得分:1)
这取决于目标实际设备。 一些(如华硕Nexus 7或三星Galaxy S [1-3]将发送其内部存储文件夹。 在其他一些设备上,它可以返回null或空。
我无法在很多设备上试用它,但从我看到的情况来看,这种方法很多是“制造商相关的答案”。
正式地,它应该返回非系统一的存储。 (SDCard或内部“焊接存储器”,它是内部核心存储器的补充)。