想象一个没有插入 sd 内存的 Android 设备。只有它自己的内存。
我不确定Environment.getExternalStorageDirectory()
在这种情况下会返回什么。
对永久数据存储有效的 Null 或内部存储器位置?
想象一个没有插入 sd 内存的 Android 设备。只有它自己的内存。
我不确定Environment.getExternalStorageDirectory()
在这种情况下会返回什么。
对永久数据存储有效的 Null 或内部存储器位置?
public static File getExternalStorageDirectory()
在 API 级别 1 中添加
获取 Android 外部存储目录。如果该目录已被用户安装在他们的计算机上、已从设备中删除或发生了其他问题,则该目录当前可能无法访问。您可以使用 getExternalStorageState() 确定其当前状态。
注意:不要被这里的“外部”这个词弄糊涂了。最好将此目录视为媒体/共享存储。它是一个文件系统,可以保存相对大量的数据,并且在所有应用程序之间共享(不强制执行权限)。传统上这是一张 SD 卡,但它也可以作为设备中的内置存储实现,与受保护的内部存储不同,并且可以作为文件系统安装在计算机上。
我认为因设备而异。
我有一个三星 Galaxy S3Environment.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 卡不存在时调用的结果也将取决于实现(即每个设备不同)。从您的应用程序的角度来看,您将其视为保存应用程序数据的地方。
这将取决于目标真实设备。一些(如 Asus Nexus 7 或 Samsung Galaxy S[1-3] 将发送其内部存储器文件夹。在其他一些设备上,它可以返回 null 或空。
我无法在很多设备上尝试它,但据我所见,这种方法在很大程度上是“依赖于制造商的答案”。
正式它应该返回不是系统一的存储。(SDCard 或内部“焊接内存”,是对内部核心内存的补充)。