【问题标题】:How can I check if the memory card available on the device or not? [duplicate]如何检查设备上的存储卡是否可用? [复制]
【发布时间】:2014-01-28 11:29:45
【问题描述】:

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

【问题讨论】:

  • 但是没有正确答案。

标签: android


【解决方案1】:

你可以得到状态:

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

【讨论】:

  • Android 设备现在提供内置的内部存储,并且存在于 String state = Environment.getExternalStorageState();所以如果 SDcard 存在与否,它总是返回 true。所有代码下方的任何帮助都不起作用。
  • @ashish 阅读我的更新
【解决方案2】:

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

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 为空,则存储卡不可用。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 嗨,它不适用于所有设备。
    【解决方案4】:

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

    【讨论】:

    • 嗨,并非适用于所有设备。
    猜你喜欢
    • 2014-09-26
    • 2011-05-21
    • 2011-03-24
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多