如何检查设备上是否有可用的存储卡?

时间:2014-01-28 11:29:46

标签: android

我想检查设备上是否有SD卡可用。现在Android设备提供内部设备内存,Android系统将路径Environment.getExternalStorageDirectory()视为内存。因此,当我们检查SD卡状态系统时,它总是说它可用。如何区分这两种类型的内存?

4 个答案:

答案 0 :(得分:2)

你可以获得州:

String state = Environment.getExternalStorageState();

然后,例如,如果要检查是否已安装SDCARD:

if (Environment.MEDIA_MOUNTED.equals(state))

您可以在http://developer.android.com/reference/android/os/Environment.html

中找到更多信息

有一篇很好的SO帖子here谈论通过USB检测已安装的SD卡。问候。

<强>更新

外部存储与SD卡不同,至少在所有设备上都没有。具有内部闪存的设备(例如我的Nexus 4)会将其视为“外部存储”。

现在,具有内部闪存和SD卡,威胁内部闪存作为外部存储器和SD卡的设备随后被添加为此外部存储器下的目录。

程序员认为这很痛苦,但我们无能为力。有一个很好的帖子here更多地关注External Storage

答案 1 :(得分:1)

答案 2 :(得分:1)

有一个代码可以检查存储卡是否可用。

File file=new File("/sys/block/mmcblk1");
    String sd_cid = null;
    try {
        String memBlk;
        if (file.exists() && file.isDirectory()) {
            memBlk = "mmcblk1";
        } else {
            //System.out.println("not a directory");
            memBlk = "mmcblk0";
        }

        Process cmd = Runtime.getRuntime().exec("cat /sys/block/"+memBlk+"/device/cid");
        BufferedReader br = new BufferedReader(new InputStreamReader(cmd.getInputStream()));
        sd_cid = br.readLine();
        }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

如果sd_cid为null,则存储卡无效。

答案 3 :(得分:0)

Environment.isExternalStorageRemovable()提供有关您的外部存储是否可移动的信息。如果返回true,则表示您的外部存储已被删除,因此这意味着设备上存在SD卡。