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

Ser*_*m's 9 android android-external-storage

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

我不确定Environment.getExternalStorageDirectory()在这种情况下会有什么回报.

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

Rag*_*dan 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);
}
Run Code Online (Sandbox Code Playgroud)