正确检测SD卡是否可用

Len*_*nie 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

AAn*_*kit 5

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

public static boolean isExternalStorageEmulated ()
Run Code Online (Sandbox Code Playgroud)

在API级别11中添加

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

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

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

Android文档