Android:如何查找SD卡是否存在

4

我遇到了一个问题。我的Galaxy Tab带有16GB的内部存储和2GB的SD卡。

当我使用environment.getExternalStorageState时,它返回已挂载。然而,当我从Galaxy Tab中取出SD卡时,它仍然返回已挂载,因为它将内部存储视为外部存储。有没有办法区分真正的SD卡和内部存储?

谢谢

4个回答

2

目前似乎没有任何公共API可用。您可以通过查看/proc/mounts来检查,但是您的代码将会与设备有关,因为并不是所有设备都在相同的位置挂载辅助外部存储(SD卡)。


一定有解决方案,因为当我进入设备设置然后选择SD卡选项时,它可以明确区分实际的SD卡和内部存储。这意味着一定有找到它的方法...有任何帮助吗? - Farhan
我并没有说这个问题没有解决方案,只是没有公共API可用。正如我所说,可以解析“/proc/mounts”以查找当前已挂载的设备。 - Nikolay Elenkov
就像普通的文本文件一样。在 shell 中使用 cat 命令查看其中的内容。 - Nikolay Elenkov
你能告诉我如何以编程方式读取它吗?有示例吗? - Farhan

0

我创建了一个自己的检查,它可以工作。它检查次要的、真实的SD卡是否存在。 在三星Galaxy s5 neo、Alcatel one touch 5020x和HTC One X上进行了测试。 由于它使用应用程序默认目录进行检查,所以该代码应该适用于KITKAT设备。

我创建了一个默认应用程序路径存储的字符串,然后将“primary”更改为“secondary”,然后尝试创建一个文件夹并检查其是否存在。

以下是代码:

String primaryStorage = Environment.getExternalStorageDirectory().getAbsolutePath();
String secondaryStorage = System.getenv("SECONDARY_STORAGE");
Boolean hasSecondary = false;

String internalSD = getExternalFilesDir(null) + "/test";
String externalSD = internalSD.replace(primaryStorage, secondaryStorage);

            try{
                File dir = new File(externalSD);
                dir.mkdirs();

                if (dir.isDirectory()) {
                    dir.delete();
                    hasSecondary = true;
                }                   
            } catch (Exception e) {
            }

0

我认为/storage/sdcard0/用于内部SD卡,而/storage/sdcard1/用于外部SD卡,如果有两个存储选项。 如果您要检查文件是否存在于任何一个SD卡中,您应该检查所有可能的路径。

String path;    
if(new File("/mnt/sdcard/yourpath").exists()) {
    path="/storage/sdcard/yourpath";
} else if(new File("/storage/sdcard0/yourpath").exists()) {
    path="/storage/sdcard0/yourpath";
} else if(new File("/storage/sdcard1/yourpath").exists()) {
    path="/storage/sdcard1/yourpath";
}

这不是真的。次要存储设备可以挂载在文件系统中的许多不同位置,具体取决于设备。这正是访问它的主要问题 - 没有统一性。我能想到的唯一选择是读取/proc/mounts,保持乐观,交叉手指,并尝试猜测哪个条目是SD卡。 - sdf3qrxewqrxeqwxfew3123

-2

我尝试像这样

    if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
{

    Log.i("tag", "SDCard is mounted");

    }

或者这个例子可以帮助你


2
在这两种情况下(当我移除或插入SD卡时),我得到的结果是相同的... 它对我不起作用... - Farhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接