正确检测SD卡是否可用

时间:2013-02-05 20:59:30

标签: android

我使用以下代码检查SD卡是否可用,但是在运行Android 4.x的Samsung Galaxy II和Note设备上以及后来操作系统模拟有SD卡,即使实际上没有SD卡设备。

private boolean isSDCardAvailable() {
    return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}

如果SD卡可用,则调用getExternalCacheDir()获取我向用户显示错误的目录,并调用getCacheDir()以使用内部存储。

即使没有SD卡,上述方法也会返回TRUE和ALL设备。

2 个答案:

答案 0 :(得分:5)

自API级别11开始,此方法可用,它可以让您了解内部存储器是否可用作外部存储器。在某些设备getExternalStorageDirectory()中,即使SD卡不可用,也会返回true。请阅读以下文档以获取详细信息。

public static boolean isExternalStorageEmulated ()
  

在API级别11中添加

     

返回设备是否具有模拟的外部存储设备。 如果为true,则设备没有真正的外部存储空间,并且getExternalStorageDirectory()返回的目录将使用内部存储系统的一部分进行分配。

某些系统服务(例如软件包管理器)使用它来确定应用程序的安装位置。

  

仿真外部存储也可以加密 - 有关其他详细信息,请参阅setStorageEncryption(android.content.ComponentName,boolean)。

Android docs

答案 1 :(得分:0)

boolean mExternalStorageAvailable;
boolean mExternalStorageWriteable;

private void checkExternalMedia() {
    mExternalStorageAvailable = false;
    mExternalStorageWriteable = false;
    String state = Environment.getExternalStorageState();

    if (Environment.MEDIA_MOUNTED.equals(state)) {
        mExternalStorageAvailable = mExternalStorageWriteable = true;
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        mExternalStorageAvailable = true;
        mExternalStorageWriteable = false;
    } else {
        mExternalStorageAvailable = mExternalStorageWriteable = false;
    }
}