我使用以下代码检查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设备。
答案 0 :(得分:5)
自API级别11开始,此方法可用,它可以让您了解内部存储器是否可用作外部存储器。在某些设备getExternalStorageDirectory()
中,即使SD卡不可用,也会返回true。请阅读以下文档以获取详细信息。
public static boolean isExternalStorageEmulated ()
在API级别11中添加
返回设备是否具有模拟的外部存储设备。 如果为true,则设备没有真正的外部存储空间,并且getExternalStorageDirectory()返回的目录将使用内部存储系统的一部分进行分配。
某些系统服务(例如软件包管理器)使用它来确定应用程序的安装位置。
仿真外部存储也可以加密 - 有关其他详细信息,请参阅setStorageEncryption(android.content.ComponentName,boolean)。
答案 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;
}
}