3

我使用以下代码检查 SD 卡是否可用,但在运行 Android 4.x 及更高版本的三星 Galaxy II 和 Note 设备上,即使实际上设备上没有 SD 卡,操作系统也会模拟拥有 SD 卡。

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

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

上面的方法返回 TRUE 和 ALL 设备,即使它们没有 SD 卡。

4

2 回答 2

5

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

public static boolean isExternalStorageEmulated ()

在 API 级别 11 中添加

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

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

模拟的外部存储也可能被加密 - 有关更多详细信息,请参阅 setStorageEncryption(android.content.ComponentName, boolean)。

安卓文档

于 2013-02-05T21:07:30.550 回答
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;
    }
}
于 2013-02-05T21:17:30.807 回答